2017-01-02 89 views
2
country state  year area 
usa  iowa  2000 30 
usa  iowa  2001 30 
usa  iowa  2002 30 
usa  iowa  2003 30 
usa  kansas  2000 500 
usa  kansas  2001 500 
usa  kansas  2002 500 
usa  kansas  2003 500 
usa washington 2000 245 
usa washington 2001 245 
usa washington 2002 245 
usa washington 2003 245 

在上面的數據框中,我想刪除佔總面積的百分比< 10%的行。在這種情況下,這將是所有狀態爲愛荷華州的行。在熊貓中做什麼是最好的方法?我嘗試了groupby,但不知道如何繼續。在大熊貓數據框中刪除行數據佔總數的百分比

df.groupby('area').sum() 

回答

1

你想採取任何area值的每個state中,總結起來。我拿第一。

  • groupby('state').area.first().sum()是我們標準化的東西。

df[df.area.div(df.groupby('state').area.first().sum()) >= .1] 

    country  state year area 
4  usa  kansas 2000 500 
5  usa  kansas 2001 500 
6  usa  kansas 2002 500 
7  usa  kansas 2003 500 
8  usa washington 2000 245 
9  usa washington 2001 245 
10  usa washington 2002 245 
11  usa washington 2003 245 
+0

感謝@piRSquared,在這種情況下,右側區域爲30 + 500 + 245你的解決方案會加起來整列對? – user308827

2

drop_duplicates和雙boolean indexing另一種解決方案:

a = df.drop_duplicates(['state','area']) 
print (a) 
    country  state year area 
0  usa  iowa 2000 30 
4  usa  kansas 2000 500 
8  usa washington 2000 245 

states = a.loc[a.area.div(a.area.sum()) >.1, 'state'] 
print (states) 
4  kansas 
8 washington 
Name: state, dtype: object 

print (df[df.state.isin(states)]) 
    country  state year area 
4  usa  kansas 2000 500 
5  usa  kansas 2001 500 
6  usa  kansas 2002 500 
7  usa  kansas 2003 500 
8  usa washington 2000 245 
9  usa washington 2001 245 
10  usa washington 2002 245 
11  usa washington 2003 245 
相關問題