根据其他列的值更改数据框的列中的值(值来自列表)

时间:2019-01-02 12:00:02

标签: python pandas dataframe

我在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

1 个答案:

答案 0 :(得分:0)

pd.DataFrame.locpd.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