我正在尝试根据单个条件中的多个列中的值过滤数据帧,但保留其他列,我根本不想应用过滤器。
我已经回顾了这些答案,第三个是最接近的,但仍然没有运气:
设定:
import pandas as pd
df = pd.DataFrame({
'month':[1,1,1,2,2],
'a':['A','A','A','A','NONE'],
'b':['B','B','B','B','B'],
'c':['C','C','C','NONE','NONE']
}, columns = ['month','a','b','c'])
l = ['month','a','c']
df = df.loc[df['month'] == df['month'].max(), df.columns.isin(l)].reset_index(drop = True)
当前输出:
month a c
0 2 A NONE
1 2 NONE NONE
期望输出:
month a
0 2 A
1 2 NONE
我试过了:
sub = l[1:]
df = df[(df.loc[:, sub] != 'NONE').any(axis = 1)]
以及许多其他变体(.all()
,[sub, :]
,~df.loc[...]
,(axis = 0)
),但都没有运气。
基本上我想删除任何包含所有“NONE”值的列(在sub
列表中)。
非常感谢任何帮助。
答案 0 :(得分:3)
您首先要将'NONE'
替换为np.nan
,以便dropna
将其识别为空值。然后将loc
与您的布尔序列和列子集一起使用。然后将dropna
与axis=1
和how='all'
df.replace('NONE', np.nan) \
.loc[df.month == df.month.max(), l].dropna(axis=1, how='all')
month a
3 2 A
4 2 NONE