2017-06-11 122 views
1

我正在處理影響不同國家不同行業的事件數據庫,並且想要創建一個統計每個國家事故率分類的表格。統計某些字符串在Python中出現的次數

數據庫看起來像這樣ATM

Incident Name | Country Affected | Sector Affected 
incident_1  | US,TW,CN   | Engineering,Media 
incident_2  | FR,RU,CN   | Government 
etc., etc. 

我的目標是建立一個看起來像這樣:

Country | Engineering | Media | Government 
CN  | 3   | 0  | 5 
etc. 

現在我的方法基本上是,如果循環,以檢查是否使用國家/地區列包含特定字符串(例如'CN'),如果返回True,則從集合中運行計數器以創建初始計數字典,然後保存。

我的問題是如何將我們縮放到可以跨整個數據庫運行的級別以及如何實際保存由Counter生成的字典。

+0

你介意編輯你的帖子以顯示你到目前爲止的代碼嗎? –

+0

有沒有可能改變您的數據庫? (美國,工程),(TW,工程),(CN,工程)等應該都是分開的行 –

回答

0

pd.Series.str.get_dummiespd.DataFrame.dot

c = df['Country Affected'].str.get_dummies(sep=',') 
s = df['Sector Affected'].str.get_dummies(sep=',') 

c.T.dot(s) 

    Engineering Government Media 
CN   1   1  1 
FR   0   1  0 
RU   0   1  0 
TW   1   0  1 
US   1   0  1 

更大示例

np.random.seed([3,1415]) 

countries = ['CN', 'FR', 'RU', 'TW', 'US', 'UK', 'JP', 'AU', 'HK'] 
sectors = ['Engineering', 'Government', 'Media', 'Commodidty'] 

def pick_rnd(x): 
    i = np.random.randint(1, len(x)) 
    j = np.random.choice(x, i, False) 
    return ','.join(j) 

df = pd.DataFrame({ 
     'Country Affected': [pick_rnd(countries) for _ in range(10)], 
     'Sector Affected': [pick_rnd(sectors) for _ in range(10)] 
    }) 

df 

      Country Affected    Sector Affected 
0      CN    Government,Media 
1 FR,TW,JP,US,UK,CN,RU,AU   Commodidty,Government 
2     HK,AU,JP     Commodidty 
3   RU,CN,FR,JP,UK Media,Commodidty,Engineering 
4 CN,RU,FR,JP,TW,HK,US,UK Government,Media,Commodidty 
5     FR,CN     Commodidty 
6  FR,HK,JP,TW,US,AU,CN     Commodidty 
7 CN,HK,RU,TW,UK,US,FR,JP    Media,Commodidty 
8     JP,UK,AU    Engineering,Media 
9     RU,UK,FR       Media 

然後

c = df['Country Affected'].str.get_dummies(sep=',') 
s = df['Sector Affected'].str.get_dummies(sep=',') 

c.T.dot(s) 

    Commodidty Engineering Government Media 
AU   3   1   1  1 
CN   6   1   3  4 
FR   6   1   2  4 
HK   4   0   1  2 
JP   6   2   2  4 
RU   4   1   2  4 
TW   4   0   2  2 
UK   4   2   2  5 
US   4   0   2  2 
+0

太棒了,我不能夠感謝你。我以爲我會經歷大量的嵌入式循環和它的只有2行...... – Lublamai

+0

@Lublamai很高興我能幫上忙。 – piRSquared

相關問題