在大熊猫数据框中删除行数据占总数的百分比
问题描述:
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()
答
你想采取任何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
答
与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
感谢@piRSquared,在这种情况下,右侧区域为30 + 500 + 245你的解决方案会加起来整列对? – user308827