【发布时间】:2019-10-05 20:52:25
【问题描述】:
希望能找到高手帮忙)
有这样一张桌子
X2 X3 X4 Y Y1
01.02.2019 1 1 1
02.02.2019 2 2 0
02.02.2019 2 3 0
02.02.2019 2 1 1
03.02.2019 1 2 1
04.02.2019 2 3 0
05.02.2019 1 1 1
06.02.2019 2 2 0
07.02.2019 1 3 1
08.02.2019 2 1 1
09.02.2019 1 2 0
10.02.2019 2 3 1
11.02.2019 1 1 0
12.02.2019 2 2 1
13.02.2019 1 3 0
14.02.2019 2 1 1
15.02.2019 1 2 1
16.02.2019 2 3 0
17.02.2019 1 1 1
18.02.2019 2 2 0
在 Y1 列中,需要计算 Y 列过去 5 天的移动平均值,但只能通过条件 X3 和 X4 进行过滤。过滤器等于当前行的列的当前值。
例如,对于字符串
02/04/2019 2 3 0 平均值将等于 0,因为它只有字符串匹配条件
02.02.2019 2 3 0
怎么做我不明白,我知道它会是这样的
filtered_X4 = df ['X4']. where (condition_1 & condition_2 & condition_3)
但是如何自己设置条件condition_1,2,3我不明白。
看到了很多过滤器已知的例子,例如
condition_1 = df ['X2']. isin ([2, 3, 5])
但这不是我需要的,因为我的条件值会随着字符串而变化
如何计算我知道的平均值
df ['Y1'] = filtered_X4.shift (1) .rolling (window = 999999, min_periods = 1) .mean ()
但无法配置过滤。
add1:这是我想要得到的结果:
X2 X3 X4 Y Y1
01.02.2019 1 1 1 NAN
02.02.2019 2 2 0 NAN
02.02.2019 2 3 0 NAN
02.02.2019 2 1 1 NAN
03.02.2019 1 2 1 NAN
04.02.2019 2 3 0 0
05.02.2019 1 1 1 1
06.02.2019 2 2 0 0
07.02.2019 1 3 1 NAN
08.02.2019 2 1 1 NAN
09.02.2019 1 2 0 NAN
10.02.2019 2 3 1 NAN
11.02.2019 1 3 0 1
12.02.2019 2 2 1 NAN
13.02.2019 1 3 0 0
14.02.2019 2 1 1 NAN
15.02.2019 2 2 1 1
16.02.2019 2 3 0 NAN
17.02.2019 1 1 1 NAN
18.02.2019 2 2 0 1
例如,计算这条线的平均值(Y1):
X2 X3 X4 Y Y1
04.02.2019 2 3 0
我只需要从日期帧中获取字符串,其中 X3 = 2 和 X4 = 3 和 X2 从 30.01.2019 到 03.02.2019
【问题讨论】:
-
欢迎来到堆栈溢出,这是一个有趣的问题,但我不太清楚你在做什么。您能否在问题中的示例数据框中包含您正在寻找的输出?这会很有帮助。
-
补充资料
标签: python python-3.x pandas dataframe rolling-computation