为了账号安全,请及时绑定邮箱和手机立即绑定

替换数据框中的值

替换数据框中的值

不负相思意 2023-08-22 16:24:16
我有一个包含 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


查看完整回答
反对 回复 2023-08-22
?
繁星coding

TA贡献1797条经验 获得超4个赞

这是执行此操作的几种方法之一,是的,它需要额外的包,但如果您不知道np.where它非常方便。


import numpy as np


df['C'] = np.where(df['B']==22, df['A'], df['C'])


查看完整回答
反对 回复 2023-08-22
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

df.loc[df.B==22, 'C'] = df.loc[df.B==22, 'A']



查看完整回答
反对 回复 2023-08-22
?
慕容708150

TA贡献1831条经验 获得超4个赞

另一种选择是使用locand 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在赋值时使用它,因为它会导致此警告。


查看完整回答
反对 回复 2023-08-22
  • 4 回答
  • 0 关注
  • 1564 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信