比较后如何从数据框中删除行
How delete rows from dataframe after comparison
我想过滤我的数据框,使用条件 filter
的部分。而且我不知道该怎么做
import numpy as np
table = pd.DataFrame({'movie': ['thg', 'thg', 'mol', 'mol', 'lob', 'lob'],
'rating': [3., 4., 5., np.nan, np.nan, np.nan],
'name': ['John', 'Paul', 'Adam', 'Graham', 'Eva', 'Thomas']})
filter = pd.DataFrame({'name': ['John', 'Paul','Adam', 'Graham', 'Eva', 'Thomas'],
'qty': [1, 1, 3, 10, 7, 5]})
>>> table
movie name rating
0 thg John 3
1 thg Paul 4
3 mol Adam 5
4 mol Graham NaN
5 lob Eva NaN
6 lob Thomas NaN
我知道这行不通,但我无法更改,请帮助我
result=df[(df['name'] == filter[qty<3]) ]
>>> result
movie name rating
0 thg John 3
1 thg Paul 4
我相信你需要:
table[table['name'].isin(filt.loc[filt['qty']<3,'name'])]
movie rating name
0 thg 3.0 John
1 thg 4.0 Paul
注意:我已将 filter
变量更改为 filt
,因为 filter
是一个内置函数,您不应该使用这样的名称命名变量
你可以试试。我正在取消删除此答案,因为与其他答案不同,我没有使用 loc
,尽管它本质上是相同的:
result = table[table['name'].isin(filter[filter['qty']<3]['name'].values)]
使用Series.isin
with callable
:
table[table['name'].isin(df_filter.loc[lambda x: x['qty']<3, 'name'])]
movie rating name
0 thg 3.0 John
1 thg 4.0 Paul
table.merge(df_filter.loc[lambda x: x['qty'].lt(3), ['name']])
我有一个更简洁的解决方案,为什么不使用查询:
df=table.merge(filter,on="name")
df.query("qty<3")
我想过滤我的数据框,使用条件 filter
的部分。而且我不知道该怎么做
import numpy as np
table = pd.DataFrame({'movie': ['thg', 'thg', 'mol', 'mol', 'lob', 'lob'],
'rating': [3., 4., 5., np.nan, np.nan, np.nan],
'name': ['John', 'Paul', 'Adam', 'Graham', 'Eva', 'Thomas']})
filter = pd.DataFrame({'name': ['John', 'Paul','Adam', 'Graham', 'Eva', 'Thomas'],
'qty': [1, 1, 3, 10, 7, 5]})
>>> table
movie name rating
0 thg John 3
1 thg Paul 4
3 mol Adam 5
4 mol Graham NaN
5 lob Eva NaN
6 lob Thomas NaN
我知道这行不通,但我无法更改,请帮助我
result=df[(df['name'] == filter[qty<3]) ]
>>> result
movie name rating
0 thg John 3
1 thg Paul 4
我相信你需要:
table[table['name'].isin(filt.loc[filt['qty']<3,'name'])]
movie rating name
0 thg 3.0 John
1 thg 4.0 Paul
注意:我已将 filter
变量更改为 filt
,因为 filter
是一个内置函数,您不应该使用这样的名称命名变量
你可以试试。我正在取消删除此答案,因为与其他答案不同,我没有使用 loc
,尽管它本质上是相同的:
result = table[table['name'].isin(filter[filter['qty']<3]['name'].values)]
使用Series.isin
with callable
:
table[table['name'].isin(df_filter.loc[lambda x: x['qty']<3, 'name'])]
movie rating name
0 thg 3.0 John
1 thg 4.0 Paul
table.merge(df_filter.loc[lambda x: x['qty'].lt(3), ['name']])
我有一个更简洁的解决方案,为什么不使用查询:
df=table.merge(filter,on="name")
df.query("qty<3")