2017-06-11 115 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

相关问题