【问题标题】:Update two dataframe column based on condition根据条件更新两个数据框列
【发布时间】:2020-06-25 04:24:50
【问题描述】:

我有一个数据框,其列为“PK”、“Column1”、“Column2”。 我想按如下方式更新 Column1 和 Column2:

If Column1 > Column2 then (Column1 = Column1 - Column2) and at the same time Column2 = 0

同样

If Column1 < Column2 then (Column2 = Column2 - Column1) and at the same time Column1 = 0

我尝试了以下方法,但没有给出预期的结果:

df["Column1"] = np.where(df['Column1'] > df['Column2'], df['Column1'] - df['Column2'], 0)
df["Column2"] = np.where(df['Column1'] < df['Column2'], df['Column2'] - df['Column1'], 0)

【问题讨论】:

  • 你也可以分享一些数据,以帮助提供解决方案

标签: python-3.x pandas conditional-statements


【解决方案1】:

使用DataFrame.assign 避免在代码的第二行测试覆盖的列Column1

df = pd.DataFrame({
         'Column1':[4,5,4,5,5,4],
         'Column2':[7,8,9,4,2,3],

})
print (df)
   Column1  Column2
0        4        7
1        5        8
2        4        9
3        5        4
4        5        2
5        4        3

a = np.where(df['Column1'] > df['Column2'], df['Column1'] - df['Column2'], 0)
b = np.where(df['Column1'] < df['Column2'], df['Column2'] - df['Column1'], 0)

df = df.assign(Column1 = a, Column2 = b)
print (df)
   Column1  Column2
0        0        3
1        0        3
2        0        5
3        1        0
4        3        0
5        1        0

【讨论】:

    猜你喜欢
    • 2022-12-03
    • 2022-10-14
    • 2019-10-14
    • 2023-02-20
    • 2021-11-25
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 2022-11-25
    相关资源
    最近更新 更多