替换数据框中的值

时间:2020-09-20 15:32:32

标签: python pandas

我有一个包含3列(A,B,C)的数据框。当列C = 22时,我想用列A更新列B。我已经写了这样的更新语句,但是它正在为不匹配的行更新NaN。你能告诉我如何更新数据框中的数据吗?

df = pd.DataFrame(data=[[10,20,30],[11,21,31],[12,22,32]], columns=['A','B','C'])
df.C = df[df.B==22].A

4 个答案:

答案 0 :(得分:3)

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

import numpy as np

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

答案 1 :(得分:3)

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

答案 2 :(得分:3)

让我们尝试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

答案 3 :(得分:2)

另一种替代方法是使用locreindex

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.Cuse bracket notation instead of a . notation)时,它将把名为C的序列更新为结果中不包含其他索引(仅2个)的,因此其他索引设置为np.nan

强烈建议在分配值时使用chained indexing,因为这会导致this警告。