繁体   English   中英

根据总数的百分比在熊猫数据框中删除行

[英]Drop rows in pandas dataframe based on fraction of total

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%的行。 在这种情况下,所有行的状态均为iowa。 在大熊猫中做这件事的最好方法是什么? 我尝试了groupby,但不确定如何继续。

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

另一个具有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

您想要获取每个state内的任何area值并对其求和。 我先。

  • 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM