【发布时间】: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