首页 > 解决方案 > 在 Pandas 的不同日期范围内应用不同的变量

问题描述

我有一个数据框,其中包含从 A 列到 H 列的日期和值。此外,我有一些固定变量 X1=5、X2=6、Y1=7、Y2=8、Z1=9

Date                     A      B        C   D      E   F   G    H
0   2018-01-02 00:00:00 7161    7205    -44 54920   73  7   5   47073
1   2018-01-03 00:00:00 7101    7147    -46 54710   73  6   5   46570
2   2018-01-04 00:00:00 7146    7189    -43 54730   70  7   5   46933
3   2018-01-05 00:00:00 7079    7121    -43 54720   70  6   5   46404
4   2018-01-08 00:00:00 7080    7125    -45 54280   70  6   5   46355
5   2018-01-09 00:00:00 7060    7102    -43 54440   70  6   5   46319
6   2018-01-10 00:00:00 7113    7153    -40 54510   70  7   5   46837
7   2018-01-11 00:00:00 7103    7141    -38 54690   70  7   5   46728
8   2018-01-12 00:00:00 7074    7110    -36 54310   65  6   5   46357
9   2018-01-15 00:00:00 7181    7210    -29 54320   65  6   5   46792
10  2018-01-16 00:00:00 7036    7078    -42 54420   65  6   5   45709
11  2018-01-17 00:00:00 6994    7034    -40 53690   65  6   5   45416
12  2018-01-18 00:00:00 7032    7076    -44 53590   65  6   5   45705
13  2018-01-19 00:00:00 6999    7041    -42 53560   65  6   5   45331
14  2018-01-22 00:00:00 7025    7068    -43 53500   65  6   5   45455
15  2018-01-23 00:00:00 6883    6923    -41 53490   65  6   5   44470
16  2018-01-24 00:00:00 7111    7150    -39 52630   65  6   5   45866
17  2018-01-25 00:00:00 7101    7138    -37 53470   65  6   5   45663
18  2018-01-26 00:00:00 7043    7085    -43 53380   65  6   5   45087
19  2018-01-29 00:00:00 7041    7085    -44 53370   65  6   5   44958
20  2018-01-30 00:00:00 7010    7050    -41 53040   65  6   5   44790
21  2018-01-31 00:00:00 7079    7118    -39 52880   65  6   5   45248

我想要做的是使用列 A 到 H 中的值以及那些固定变量向这个数据框添加一些按列计算的简单计算。

棘手的部分是我需要将不同的变量应用于不同的日期范围。

例如,在 2018-01-01 到 2018-01-10 期间,我想计算一个新列 I,其值等于:(A+B+C)*X1*Y1+Z1;而在2018-01-11至2018-01-25期间,计算需要取(A+B+C)*X2*Y1+Z1。与适用于每个日期范围的 Y1 和 Y2 类似。

我知道这可以计算/创建一个新列 I。

df[I]=(df[A]+df[B]+df[C])*X1*Y1+Z1

但不确定如何能够灵活地将不同的变量用于不同的日期范围。

标签: pythonpython-3.xpandasdataframe

解决方案


您可以使用np.select根据条件定义值:

cond = [df.Date.between('2018-01-01','2018-01-10'), df.Date.between('2018-01-11','2018-01-25')]
values = [(df['A']+df['B']+df['C'])*X1*Y1+Z1, (df['A']+df['B']+df['C'])*X2*Y2+Z1]

# select values depending on the condition
df['I'] = np.select(cond, values)

推荐阅读