我在python中有一个数据框,例如:
col1 col2 col3 col4
0 A C B D
1 C E E A
2 E A E A
3 A D D D
4 B B B B
5 D D D D
6 F F A F
7 E E E E
8 B B B B
用于创建数据框的代码:
d = {'col1':['A','C','E','A','B','D','F','E','B'], 'col2':['C','E','A','D','B','D','F','E','B'],
'col3':['B','E','E','D','B','D','A','E','B'], 'col4':['D','A','A','D','B','D','F','E','B']}
df = pd.DataFrame(data=d)
让list1为['A','C','E'],list2为['B','D','F']。 我想要的是:如果在col1中保留来自list1的元素,而在col2-col4其中一个保留来自list2的元素,那么我想消除最后一个元素(因此将其替换为”)。
我尝试了df['col2'].loc[(df['col1'] in list1) & (df[['col2'] in list2)]=''
,但这并不是我想要的,但至少可以朝正确的方向进行,不幸的是它没有用。有人可以帮忙吗?
这是我的预期输出:
col1 col2 col3 col4
0 A B D
1 C E E A
2 E A E A
3 A D D
4 B B B B
5 D D D D
6 F F A F
7 E E E E
8 B B B B
答案 0 :(得分:0)
pd.DataFrame.loc
是pd.DataFrame
的一种方法,因此应将其与数据框一起使用,而不要与序列一起使用。此外,您可以通过pd.DataFrame.any
测试多个系列的条件:
m1 = df['col1'].isin(list1)
m2 = df[['col2', 'col3', 'col4']].isin(list2).any(1)
df.loc[m1 & m2, 'col2'] = ''
结果:
print(df)
col1 col2 col3 col4
0 A B D
1 C E E A
2 E A E A
3 A D D
4 B B B B
5 D D D D
6 F F A F
7 E E E E
8 B B B B