如何有条件地更新熊猫数据框中的多个列[英] How can I conditionally update multiple columns in a panda dataframe

本文是小编为大家收集整理的关于如何有条件地更新熊猫数据框中的多个列的处理方法,想解了如何有条件地更新熊猫数据框中的多个列的问题怎么解决?如何有条件地更新熊猫数据框中的多个列问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在尝试在我的熊猫数据框架中有条件地更新多行.这是我的数据:

df = pd.DataFrame([[1,1,1], [2,2,2], [3,3,3]], columns=list('ABC'))

我可以通过两个步骤进行我想要的更新:

df.loc[df['A'] == 1, 'B'] = df['C'] +10
df.loc[df['A'] == 1, 'A'] = df['C'] +11

或我可以在一个步骤中更新为常数值:

df.loc[df['A'] == 1, ['A', 'B']] = [11, 12]

,但我无法在单个步骤中从其他列中更新多个列:

df.loc[df['A'] == 1, ['A', 'B']] = [df['C'] + 10, df['C'] + 11]
...
ValueError: shape mismatch: value array of shape (2,3) could not be broadcast to indexing result of shape (1,2)

有什么想法我该怎么做?


编辑:感谢@edchum提供简单情况的简单解决方案 - 已更新了问题以演示更复杂的现实.

推荐答案

因此,几年后查看这个问题,我看到了错误,以胁迫返回的结果,以便它正确分配了您需要访问标量值并使用它们来分配,以便它们根据需要对齐:

In [22]:
df.loc[df['A'] == 1, ['A', 'B']] = df['C'].values[0] + 10,df['C'].values[0] + 11
df

Out[22]:
    A   B  C
0  11  12  1
1   2   2  2
2   3   3  3

其他推荐答案

我也不确定这是否是实现这一目标的最佳方法,但它有效:

In [284]: df.loc[df['A'] == 1, ['A', 'B']] = pd.DataFrame({'A':df.C + 10, 'B':df.C + 11}, index=df.index)

In [285]: df
Out[285]:
    A   B  C
0  11  12  1
1   2   2  2
2   3   3  3

本文地址:https://www.itbaoku.cn/post/1728100.html