【问题标题】:Calculate absolute difference for several columns together pandas计算几列的绝对差值 pandas
【发布时间】:2022-08-17 15:00:32
【问题描述】:

我有一个像下面这样的df(从长到宽),每个“公司”列中的值代表销售额。

date firm_a firm_b firm_c
2022-01-01 1000 1000 1000
2022-02-01 1500 500 2000
2022-03-01 2000 100 5000

我想计算每个 \'firm\' 列的第一个值 (2022-01-01) 的销售额绝对差异。

到目前为止,我所做的是为每个公司变量创建一个新列(添加 \'_x\' 后缀),其中计算与第一个值的绝对差。

df[\'firm_a_x\'] = df[\'firm_a\'] - df[\'firm_a\'].iat[0]
df[\'firm_b_x\'] = df[\'firm_b\'] - df[\'firm_b\'].iat[0]
df[\'firm_c_x\'] = df[\'firm_c\'] - df[\'firm_c\'].iat[0]

df = df[[col for col in df.columns if col.endswith(\'_x\')]]

代码按预期工作,提供以下结果:

date firm_a_x firm_b_x firm_c_x
2022-01-01 0 0 0
2022-02-01 500 -500 1000
2022-03-01 1000 -900 4000

问题是,虽然此代码适用于具有少量变量的数据帧,但对于大量列它变得低效,因为我将不得不写这个

df[\'firm_name_x\'] = df[\'firm_name\'] - df[\'firm_name\'].iat[0]

每个变量的一段代码多次。

因此,我的问题是:有没有一种方法可以以更简单、更快的方式计算数据帧所有列(索引/第一列除外)的绝对差异?

谢谢!!

    标签: python pandas dataframe function


    【解决方案1】:

    IIUC 用途:

    df = df.set_index('date')
    df = df.sub(df.iloc[0]).add_suffix('_x')
    print (df)
                firm_a_x  firm_b_x  firm_c_x
    date                                    
    2022-01-01         0         0         0
    2022-02-01       500      -500      1000
    2022-03-01      1000      -900      4000
    

    【讨论】:

      猜你喜欢
      • 2015-07-03
      • 1970-01-01
      • 2022-11-22
      • 2017-09-22
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      相关资源
      最近更新 更多