2016-09-21 118 views
3

我對根據其他列的總和創建熊貓數據框有疑問。根據另一列計算值的出現次數

例如,我有這樣的數據幀

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 

回答

4

選項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

+0

感謝您的回答,這一個偉大的工程! –

3

可以使用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.