我在列有条件的其他两列中有替换值的问题。
例如,我们有三列。 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'”:
可以对这个问题做些什么?
答案 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