我需要在Pandas数据框中基于另一列的值设置一个列的值。这是逻辑:
if df['c1'] == 'Value':
df['c2'] = 10
else:
df['c2'] = df['c3']
我无法让它按照我期望的那样工作,这就是简单地创建一个包含新值的列(或更改现有列的值:两种方式都适用于我)。
如果我尝试运行上面的代码,或者将其编写为函数并使用apply方法,我会得到以下结果:
ValueError: 系列的真值是模糊的。 使用a.empty,a.bool(),a.item(),a.any()或a.all()。
df.loc[df['c1'] == 'Value', 'c1'] = 10
的语句进行赋值时,即使我使用了.loc[]
语法,我也会收到可怕的SettingWithCopyWarning
警告。 迄今为止,这还不是我的问题,但是我发现很奇怪,尽管使用了建议的.loc[]
方法,我仍然会收到警告。 有什么解决方法吗?这是在pandas 1.2.3,numpy 1.18.5和python 3.7.10中。 - DarrenSettingWithCopyWarning
最常见的原因是在视图上尝试分配值。你尝试修改的df
是否可能是较大数据框的子集?在这样的视图上使用上述方法会引发警告。值得一提的是,很难预测哪些操作会导致pandas中的视图(请参见此处)。 - sacuLdf['c1'].loc[df['c1'] > 1000] = df['c1'].loc[df['c1'] > 1000]/1000
,我得到了SettingWithCopyWarning
警告。然而,使用第二种选项df['c1'].loc[df['c1'] > 1000, 'c1']
,我不会收到该警告。 - Averell