根据其他两列替换pandas中的值

时间:2017-11-13 14:24:51

标签: python-3.x pandas dataframe replace

我在列有条件的其他两列中有替换值的问题。

例如,我们有三列。 A,B和C. A列和B列都是布尔值,包含True和False,C列包含三个值:“Payroll”,“Social”和“Other”。

当C列中的A列和B列为True时,我们的值为“Payroll”。 我想更改C列中的值,其中A列和B列都是True。

我尝试了以下代码:但是给了我这个错误“'NoneType'对象没有属性'where'”:

data1.replace({'C' : { 'Payroll', 'Social'}},inplace=True).where((data1['A'] == True) & (data1['B'] == True))

但是给我这个错误“'NoneType'对象没有属性'where'”:

可以对这个问题做些什么?

2 个答案:

答案 0 :(得分:1)

我认为您需要all来检查每行是否True,然后通过布尔掩码按过滤的DataFrame分配输出:

data1 = pd.DataFrame({
    'C': ['Payroll','Other','Payroll','Social'],
    'A': [True, True, True, False],
    'B':[False, True, True, False]
})
print (data1)
       A      B        C
0   True  False  Payroll
1   True   True    Other
2   True   True  Payroll
3  False  False   Social

m = data1[['A', 'B']].all(axis=1)
#same output as
#m = data1['A'] & data1['B']
print (m)
0    False
1     True
2     True
3    False
dtype: bool

print (data1[m])
      A     B        C
1  True  True    Other
2  True  True  Payroll
data1[m] = data1[m].replace({'C' : { 'Payroll':'Social'}})
print (data1)
       A      B        C
0   True  False  Payroll
1   True   True    Other
2   True   True   Social
3  False  False   Social

答案 1 :(得分:0)

您可以使用apply函数执行此操作

def change_value(dataframe):
   for index, row in df.iterrows():
      if row['A'] == row['B'] == True:
           row['C'] = # Change to whatever value you want
      else:
           row ['C'] = # Change how ever you want