【问题标题】:Python Pandas subtracting each column and creating new columnPython Pandas 减去每一列并创建新列
【发布时间】:2020-04-20 21:24:13
【问题描述】:

我有一个带有以下列的 pandas 数据框:

一月、二月、三月、四月

我想用一月减去二月。三月与二月。 4 月和 3 月等。然后,对于这些计算中的每一个,都要使用计算创建一个新列。

我已经尝试创建一个 for 循环,但它没有工作,因为我不确定如何将每个计算存储到一个新列中以及如何声明二月 - 上一列等。

任何帮助将不胜感激。

数据框示例:

Sales January February March April 
Team1 1000    2000     3000  4000
Team2 1000    2000     3000  4000

数据框结果:

Sales January diff February diff March  diff   April 
Team1 1000    1000 2000     1000 3000    1000  4000
Team2 1000    1000 2000     1000 3000    1000  4000

【问题讨论】:

  • 这些列包含什么样的数据?请输入具有预期输出的示例输入。

标签: python pandas


【解决方案1】:

试试这个:

df = pd.concat([
    df,
    df.loc[:, 'January':] \
        .diff(axis=1) \
        .drop(columns='January') \
        .add_suffix('_diff')    
], axis=1)

试试这个:

df = pd.concat([
    df,
    df.loc[:, 'January':] \
        .diff(axis=1) \
        .drop(columns='January') \
        .add_suffix('_diff')
], axis=1)

它的作用:

  • df.loc[:, 'January':] 从 January 和右侧获取所有列
  • .diff(axis=1)计算与上一列的差值
  • .drop(columns='January') 删除 Jan 的差异列,因为它都是 n/a
  • .add_suffix('_diff') 将 February 重命名为 February_diff 等等

外部concat 是将差异列添加回原始数据框

【讨论】:

  • 太棒了,谢谢。由于使用了 diff 方法,我不需要遍历每一列以减去前一列的原因吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 2021-10-09
  • 2021-04-14
  • 2023-01-24
  • 1970-01-01
  • 2021-10-30
相关资源
最近更新 更多