根据另一列计算值的出现次数

时间:2016-09-21 04:25:44

标签: python pandas

我有一个关于根据其他列的总和创建pandas数据帧的问题。

例如,我有这个数据框

 Country    |    Accident
 England           Car
 England           Car
 England           Car
  USA              Car
  USA              Bike
  USA              Plane
 Germany           Car
 Thailand          Plane

我想根据国家/地区的所有事故的总和值制作另一个数据框。我们将忽略事故的类型,同时根据国家总结事故。

我的愿望数据框看起来像这样

  Country    |    Sum of Accidents
  England              3
    USA                3
  Germany              1
  Thailand             1

2 个答案:

答案 0 :(得分:6)

选项1
使用value_counts

df.Country.value_counts().reset_index(name='Sum of Accidents')

enter image description here

选项2
使用groupby然后size

df.groupby('Country').size().sort_values(ascending=False) \
  .reset_index(name='Sum of Accidents')

enter image description here

答案 1 :(得分:4)

您可以使用groupby方法。

示例 -

In [36]: df.groupby(["country"]).count().sort_values(["accident"], ascending=False).rename(columns={"accident" : "Sum of accidents"}).reset_index()
Out[36]:
    country  Sum of accidents
0   England                 3
1       USA                 3
2   Germany                 1
3  Thailand                 1

说明 -

df.groupby(["country"]).                               # Group by country
    count().                                           # Aggregation function which counts the number of occurences of country
    sort_values(                                       # Sorting it 
        ["accident"],                                  
        ascending=False).        
    rename(columns={"accident" : "Sum of accidents"}). # Renaming the columns
    reset_index()                                      # Resetting the index, it takes the country as the index if you don't do this.