我有一个包含 3 列(A、B、C)的数据框。当列= 22 时,我想用列更新C列。我已经编写了这样的更新语句,但它正在更新不匹配的行。你能告诉我如何更新数据框中的数据吗?ABNaNdf = pd.DataFrame(data=[[10,20,30],[11,21,31],[12,22,32]], columns=['A','B','C'])
df.C = df[df.B==22].A
4 回答
幕布斯7119047
TA贡献1794条经验 获得超8个赞
让我们尝试一下mask
df.C.mask(df.B==22, df.A,inplace=True)
df
A B C
0 10 20 30
1 11 21 31
2 12 22 12
繁星coding
TA贡献1797条经验 获得超4个赞
这是执行此操作的几种方法之一,是的,它需要额外的包,但如果您不知道np.where它非常方便。
import numpy as np
df['C'] = np.where(df['B']==22, df['A'], df['C'])
慕容708150
TA贡献1831条经验 获得超4个赞
另一种选择是使用loc
and reindex
:
df['C'] = df.loc[df.B==22,'A'].reindex(df.index).fillna(df['C'])
理想情况下,您可以np.where
在这种情况下使用,但这就是您的代码不起作用的原因:
下面
df[df.B==22].A
返回:
2 12
您将看到返回值的索引是2
,因此当您设置df.C
(使用括号表示法而不是.
表示法)时,它会更新命名C
为前一个结果的系列,该系列不包含其他索引(但仅包含2),因此其他指标设置为np.nan
此外,强烈建议不要chained indexing
在赋值时使用它,因为它会导致此警告。
添加回答
举报
0/150
提交
取消