【问题标题】:Modify a subset of a pandas column using data from another column使用来自另一列的数据修改 pandas 列的子集
【发布时间】:2021-11-09 10:22:23
【问题描述】:

我正在尝试修改列中的特定值,其中修改使用另一列中的值。例如说我有一个df:

A    B    C
1    3    8
1    6    8
2    2    9
2    6    1
3    4    5
3    6    7

我想要的df['B'] = df['B'] + df['C'] 仅用于子集df.loc[df['A'] == 2]

制作:

A    B    C
1    3    8
1    6    8
2    11   9
2    7    1
3    4    5
3    6    7

我试过了

df.loc[(df['A']==2), 'B'].apply(lambda x: x + df['C'])

但得到:

InvalidIndexError:重新索引仅对具有唯一值的索引对象有效

【问题讨论】:

    标签: python pandas dataframe subset


    【解决方案1】:

    如果你不介意使用numpy,我发现它对于像你这样的任务非常简单:

    import numpy as np
    df['B'] =  np.where(df['A'] == 2, df['B']+df['C'],df['B'])
    

    打印:

       A   B  C
    0  1   3  8
    1  1   6  8
    2  2  11  9
    3  2   7  1
    4  3   4  5
    5  3   6  7
    

    【讨论】:

    • 感谢您的回复,我赞成但完全接受了 pandas 方法,因为那是我使用的方法:)
    • 当然,只是想指出一个替代方案。
    【解决方案2】:

    你很亲密,申请不是必需的:

    m = df['A'] == 2
    #short way
    df.loc[m, 'B'] += df.loc[m, 'C']
    #long way
    df.loc[m, 'B'] = df.loc[m, 'B'] + df.loc[m, 'C']
    

    或者:

    df.loc[df['A'] == 2, 'B'] += df['C']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-14
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      • 2014-07-18
      • 1970-01-01
      • 2015-02-23
      相关资源
      最近更新 更多