熊猫:根据其他列和值本身更改单元格值

时间:2019-05-16 15:26:56

标签: python pandas dataframe

我有以下熊猫df:

category1   category2
A           B
A           C
B           NaN
A           NaN

如果满足以下条件,我想将category2中的值更改为D

  • category1 == A
  • category2 == NaN

因此,我的预期输出将是:

category1   category2
A           B
A           C
B           NaN
A           D

我尝试了两种方法:

df.loc[((df.category1 == "A") & (df.category2 == 'nan')), "category2"] = "D" # doesn't change anything

import numpy as np
df['category2'] = np.where(((df['category1'] == 'A') & (df['category2'] == "")), "D")
# ValueError: either both or neither of x and y should be given

为什么这两行都不起作用?

2 个答案:

答案 0 :(得分:2)

使用以下内容:

df.loc[df.category2.isna()&df.category1.eq('A'),'category2']='D'
print(df)

  category1 category2
0         A         B
1         A         C
2         B       NaN
3         A         D

答案 1 :(得分:2)

错误:

  

ValueError:应同时给出x和y或不给出

告诉您np.where需要一个值,条件为True False时都可以从中选择。就您而言,它只知道当TrueD时。而是:

df['category2'] = np.where(((df['category1'] == 'A') & (df['category2'].isna())),
                             "D", df['category2'])