gpt4 book ai didi

pandas - 取当前天和前一天之间的最小值 - 滚动()。分钟()

转载 作者:行者123 更新时间:2023-12-04 10:41:12 24 4
gpt4 key购买 nike

我有这个数据框:

ID      Date  X  123_Var  456_Var  789_Var
A 16-07-19 1 NaN NaN NaN
A 17-07-19 7 777.0 250.0 810.0
A 20-07-19 3 NaN NaN NaN
A 21-07-19 4 295.0 272.0 490.0
A 22-07-19 8 778.0 600.0 544.0
A 25-07-19 8 NaN NaN NaN
A 26-07-19 3 435.0 416.0 820.0
A 27-07-19 8 590.0 455.0 342.0
A 02-08-19 5 NaN NaN NaN
A 03-08-19 5 717.0 211.0 454.0
A 05-08-19 1 NaN NaN NaN
A 07-08-19 2 NaN NaN NaN
A 08-08-19 9 105.0 929.0 633.0
B 09-08-19 6 NaN NaN NaN
B 11-08-19 2 NaN NaN NaN
B 12-08-19 7 413.0 725.0 414.0
B 13-08-19 7 170.0 702.0 912.0
B 14-08-19 2 851.0 616.0 477.0
B 15-08-19 2 475.0 447.0 555.0
B 17-08-19 3 NaN NaN NaN
B 18-08-19 1 299.0 537.0 321.0

我想通过 Date (或其他方式)显示 123_Var456_Var789_Var 列之间的当天和前一天(使用 rolling().min() 列)值之间的最小值。

如果没有要比较的值,则将填充 NaN 值。

这应该由 group by 分别应用于每个 ID。

预期结果:
ID      Date  X  123_Var  456_Var  789_Var  123_Min_2  456_Min_2  789_Min_2
A 16-07-19 1 NaN NaN NaN NaN NaN NaN
A 17-07-19 7 777.0 250.0 810.0 777.0 250.0 810.0
A 20-07-19 3 NaN NaN NaN NaN NaN NaN
A 21-07-19 4 295.0 272.0 490.0 295.0 272.0 490.0
A 22-07-19 8 778.0 600.0 544.0 295.0 272.0 490.0
A 25-07-19 8 NaN NaN NaN NaN NaN NaN
A 26-07-19 3 435.0 416.0 820.0 435.0 416.0 820.0
A 27-07-19 8 590.0 455.0 342.0 435.0 416.0 342.0
A 02-08-19 5 NaN NaN NaN NaN NaN NaN
A 03-08-19 5 717.0 211.0 454.0 717.0 211.0 454.0
A 05-08-19 1 NaN NaN NaN NaN NaN NaN
A 07-08-19 2 NaN NaN NaN NaN NaN NaN
A 08-08-19 9 105.0 929.0 633.0 105.0 929.0 633.0
B 09-08-19 6 NaN NaN NaN NaN NaN NaN
B 11-08-19 2 NaN NaN NaN NaN NaN NaN
B 12-08-19 7 413.0 725.0 414.0 413.0 725.0 414.0
B 13-08-19 7 170.0 702.0 912.0 170.0 702.0 414.0
B 14-08-19 2 851.0 616.0 477.0 170.0 616.0 477.0
B 15-08-19 2 475.0 447.0 555.0 475.0 447.0 477.0
B 17-08-19 3 NaN NaN NaN NaN NaN NaN
B 18-08-19 1 299.0 537.0 321.0 299.0 537.0 321.0

最佳答案

在评论中进一步解释后,您可以尝试这些步骤。如果 Date 不在 datetime 中,则将 Date 转换为 datetime dtype。将 offset 设置为索引。通过 n = 4 而不是整数滚动。

n = 2
cols = ['123_Var', '456_Var', '789_Var']
df.Date = pd.to_datetime(df.Date, dayfirst=True) #if `Date` already datetime dtype, skip this.
df = df.set_index('Date')
df1 = (df.groupby('ID').rolling(window=f'{n}D')[cols].min()
.reset_index(0,drop=True).add_suffix(f'_min_{n}'))
df_final = df.join(df1)

Out[52]:
ID X 123_Var 456_Var 789_Var 123_Var_min_2 456_Var_min_2 \
Date
2019-07-16 A 1 NaN NaN NaN NaN NaN
2019-07-17 A 7 777.0 250.0 810.0 777.0 250.0
2019-07-20 A 3 NaN NaN NaN NaN NaN
2019-07-21 A 4 295.0 272.0 490.0 295.0 272.0
2019-07-22 A 8 778.0 600.0 544.0 295.0 272.0
2019-07-25 A 8 NaN NaN NaN NaN NaN
2019-07-26 A 3 435.0 416.0 820.0 435.0 416.0
2019-07-27 A 8 590.0 455.0 342.0 435.0 416.0
2019-08-02 A 5 NaN NaN NaN NaN NaN
2019-08-03 A 5 717.0 211.0 454.0 717.0 211.0
2019-08-05 A 1 NaN NaN NaN NaN NaN
2019-08-07 A 2 NaN NaN NaN NaN NaN
2019-08-08 A 9 105.0 929.0 633.0 105.0 929.0
2019-08-09 B 6 NaN NaN NaN NaN NaN
2019-08-11 B 2 NaN NaN NaN NaN NaN
2019-08-12 B 7 413.0 725.0 414.0 413.0 725.0
2019-08-13 B 7 170.0 702.0 912.0 170.0 702.0
2019-08-14 B 2 851.0 616.0 477.0 170.0 616.0
2019-08-15 B 2 475.0 447.0 555.0 475.0 447.0
2019-08-17 B 3 NaN NaN NaN NaN NaN
2019-08-18 B 1 299.0 537.0 321.0 299.0 537.0

789_Var_min_2
Date
2019-07-16 NaN
2019-07-17 810.0
2019-07-20 NaN
2019-07-21 490.0
2019-07-22 490.0
2019-07-25 NaN
2019-07-26 820.0
2019-07-27 342.0
2019-08-02 NaN
2019-08-03 454.0
2019-08-05 NaN
2019-08-07 NaN
2019-08-08 633.0
2019-08-09 NaN
2019-08-11 NaN
2019-08-12 414.0
2019-08-13 414.0
2019-08-14 477.0
2019-08-15 477.0
2019-08-17 NaN
2019-08-18 321.0

关于 Date
In [55]: df_final
Out[55]:
ID X 123_Var 456_Var 789_Var 123_Var_min_4 456_Var_min_4 \
Date
2019-07-16 A 1 NaN NaN NaN NaN NaN
2019-07-17 A 7 777.0 250.0 810.0 777.0 250.0
2019-07-20 A 3 NaN NaN NaN 777.0 250.0
2019-07-21 A 4 295.0 272.0 490.0 295.0 272.0
2019-07-22 A 8 778.0 600.0 544.0 295.0 272.0
2019-07-25 A 8 NaN NaN NaN 778.0 600.0
2019-07-26 A 3 435.0 416.0 820.0 435.0 416.0
2019-07-27 A 8 590.0 455.0 342.0 435.0 416.0
2019-08-02 A 5 NaN NaN NaN NaN NaN
2019-08-03 A 5 717.0 211.0 454.0 717.0 211.0
2019-08-05 A 1 NaN NaN NaN 717.0 211.0
2019-08-07 A 2 NaN NaN NaN NaN NaN
2019-08-08 A 9 105.0 929.0 633.0 105.0 929.0
2019-08-09 B 6 NaN NaN NaN NaN NaN
2019-08-11 B 2 NaN NaN NaN NaN NaN
2019-08-12 B 7 413.0 725.0 414.0 413.0 725.0
2019-08-13 B 7 170.0 702.0 912.0 170.0 702.0
2019-08-14 B 2 851.0 616.0 477.0 170.0 616.0
2019-08-15 B 2 475.0 447.0 555.0 170.0 447.0
2019-08-17 B 3 NaN NaN NaN 475.0 447.0
2019-08-18 B 1 299.0 537.0 321.0 299.0 447.0

789_Var_min_4
Date
2019-07-16 NaN
2019-07-17 810.0
2019-07-20 810.0
2019-07-21 490.0
2019-07-22 490.0
2019-07-25 544.0
2019-07-26 820.0
2019-07-27 342.0
2019-08-02 NaN
2019-08-03 454.0
2019-08-05 454.0
2019-08-07 NaN
2019-08-08 633.0
2019-08-09 NaN
2019-08-11 NaN
2019-08-12 414.0
2019-08-13 414.0
2019-08-14 414.0
2019-08-15 414.0
2019-08-17 477.0
2019-08-18 321.0

注意:如果你需要 reset_index 回到列,只需要 df_final 上的 ojit_code
df_final = df_final.reset_index()

关于pandas - 取当前天和前一天之间的最小值 - 滚动()。分钟(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59921931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com