给出以下DataFrame:
import pandas as pd
d = pd.DataFrame({'Group':['a','a','c','c'],'Value':[1,1,2,2]})
print(d)
Group Value
0 a 1
1 a 1
2 c 2
3 c 2
由于没有一行包含' b',我想删除任何一行' a'。我只想删除' a'因为' b'中没有行。基。
我知道如何获取群组中的行数' b'像这样:
len(d.loc[d['Group']=='b'])
然后执行此操作:
if len(d.loc[d['Group']=='b'])==0:
d=d.loc[d['Group']!='a']
print(d)
Group Value
2 c 2
3 c 2
...但我想知道如何在一行中将它用于.loc方法。
提前致谢!
答案 0 :(得分:1)
.all
的更直观的解决方案是创建一个掩码,然后使用if ~(d.Group == 'b').all():
d = d[d.Group != 'a']
d
Group Value
2 c 2
3 c 2
。之后,只需重新分配到过滤的切片。
df.query
您还可以使用许多其他查询方法,例如df.*loc
和df1 = df1.set_index('VNAME')
(df1['SHEET'].apply(pd.Series).stack()
.reset_index(1, drop=True)
.to_frame().assign(key=True)
.set_index(0,append=True)['key']
.unstack()
.fillna('')
.rename_axis(None,1)
.reset_index())
。