在熊猫的不同日期范围内应用不同的变量

时间:2018-08-14 16:13:32

标签: python python-3.x pandas dataframe

我有一个日期和值从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年1月11日至2018年1月25日期间,计算需要取(A + B + C)* X2 * Y1 + Z1。与应用于每个日期范围的Y1和Y2相似。

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

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

但不确定如何在不同的日期范围内使用不同的变量具有这种灵活性。

1 个答案:

答案 0 :(得分:0)

您可以使用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)