这个问题在这里已有答案:
我试图在数据帧上应用if条件,但我遗漏了一些东西(错误:系列的真值是不明确的 . 使用a.empty,a.bool(),a.item(),a . any()或a.all() . )
raw_data = {'age1': [23,45,21],'age2': [10,20,50]}
df = pd.DataFrame(raw_data, columns = ['age1','age2'])
def my_fun (var1,var2,var3):
if (df[var1]-df[var2])>0 :
df[var3]=df[var1]-df[var2]
else:
df[var3]=0
print(df[var3])
my_fun('age1','age2','diff')
3 回答
你可以用
pandas.Series.where
你可以将它包装在一个函数中
没有
np.where
或pd.Series.where
还有另一种方法 . 我并不是说它更好,但是在尝试使这个解决方案适应今天的一个具有挑战性的问题后,发现where
的语法并不那么直观 . 最后,不确定它是否可以在哪里,但是发现以下方法让你在修改之前看一下子集,这对我来说更快地找到了解决方案 . 当然也适用于OP .你故意在一个数据帧的片上设置一个值作为熊猫,所以经常警告你不要 .
This回答显示了正确的方法 .
以下为您提供一个切片:
..看起来像:
在原始数据框中为要修改切片后要保留的值添加一个额外列:
现在修改切片:
..结果:
你可以使用numpy.where:
错误更好解释here .
apply
更慢的解决方案,需要axis=1
按行进行数据处理:也可以使用
loc
,但有时可以覆盖数据: