【发布时间】:2021-08-20 03:23:06
【问题描述】:
我有一个数据框,里面有大约 3000 万条记录,按 ID 分类并按日期打开。
我需要在先前日期的数量中分配一列最近行的值,我已经尝试使用 windows 参数使用滚动功能,但不幸的是我必须分配的数量是可变的(我的意思是,可以是 12, 6, 7, ...),并且这个参数不接受来自同一个 df 的变量。
工作正常,但 12 数字可以是可变的:
indexer = pd.api.indexers.FixedForwardWindowIndexer(window_size=12)
df['REPEAT_AMOUNT'] = df['AMOUNT'].rolling(window, min_periods=1).sum()
我尝试使用 df 中的变量来更改 window_size 的数量:
df['REPEAT_AMOUNT'] = df['AMOUNT'].rolling(window=df['VARIABLE_DISTRIBUTION'].astype(int), min_periods=1).sum()
但我收到以下错误:
ValueError: window must be an integer
除此之外,第一个记录的月份差异可能与后续记录的日期数字不同。
这是我目前拥有的:
+----+-----------------------+------------+---------+
| ID | VARIABLE_DISTRIBUTION | DATE | AMOUNT |
+----+-----------------------+------------+---------+
| 1 | 12 | 30-04-2021 | - |
| 1 | 12 | 31-05-2021 | - |
| 1 | 12 | 30-06-2021 | - |
| 1 | 12 | 31-07-2021 | 100 |
| 1 | 12 | 31-08-2021 | - |
| 1 | 12 | 30-09-2021 | - |
| 1 | 12 | 31-10-2021 | - |
| 1 | 12 | 30-11-2021 | - |
| 1 | 12 | 31-12-2021 | - |
| 1 | 12 | 31-01-2022 | - |
| 1 | 12 | 28-02-2022 | - |
| 1 | 12 | 31-03-2022 | - |
| 1 | 12 | 30-04-2022 | - |
| 1 | 12 | 31-05-2022 | - |
| 1 | 12 | 30-06-2022 | - |
| 1 | 12 | 31-07-2022 | 150 |
| 2 | 8 | 30-04-2021 | - |
| 2 | 8 | 31-05-2021 | 200 |
| 2 | 8 | 30-06-2021 | - |
| 2 | 8 | 31-07-2021 | - |
| 2 | 8 | 31-08-2021 | - |
| 2 | 8 | 30-09-2021 | - |
| 2 | 8 | 31-10-2021 | - |
| 2 | 8 | 30-11-2021 | - |
| 2 | 8 | 31-12-2021 | - |
| 2 | 8 | 31-01-2022 | 300 |
| 2 | 8 | 28-02-2022 | - |
| 2 | 8 | 31-03-2022 | - |
| 2 | 8 | 30-04-2022 | - |
| 2 | 8 | 31-05-2022 | - |
| 2 | 8 | 30-06-2022 | - |
| 2 | 8 | 31-07-2022 | - |
+----+-----------------------+------------+---------+
这就是我想要的:
+----+-----------------------+------------+----------+----------------+
| ID | VARIABLE_DISTRIBUTION | DATE | AMOUNT | REPEAT_AMOUNT |
+----+-----------------------+------------+----------+----------------+
| 1 | 12 | 30-04-2021 | - | 100 |
| 1 | 12 | 31-05-2021 | - | 100 |
| 1 | 12 | 30-06-2021 | - | 100 |
| 1 | 12 | 31-07-2021 | 100 | 100 |
| 1 | 12 | 31-08-2021 | - | 150 |
| 1 | 12 | 30-09-2021 | - | 150 |
| 1 | 12 | 31-10-2021 | - | 150 |
| 1 | 12 | 30-11-2021 | - | 150 |
| 1 | 12 | 31-12-2021 | - | 150 |
| 1 | 12 | 31-01-2022 | - | 150 |
| 1 | 12 | 28-02-2022 | - | 150 |
| 1 | 12 | 31-03-2022 | - | 150 |
| 1 | 12 | 30-04-2022 | - | 150 |
| 1 | 12 | 31-05-2022 | - | 150 |
| 1 | 12 | 30-06-2022 | - | 150 |
| 1 | 12 | 31-07-2022 | 150 | 150 |
| 2 | 8 | 30-04-2021 | - | 200 |
| 2 | 8 | 31-05-2021 | 200 | 200 |
| 2 | 8 | 30-06-2021 | - | 300 |
| 2 | 8 | 31-07-2021 | - | 300 |
| 2 | 8 | 31-08-2021 | - | 300 |
| 2 | 8 | 30-09-2021 | - | 300 |
| 2 | 8 | 31-10-2021 | - | 300 |
| 2 | 8 | 30-11-2021 | - | 300 |
| 2 | 8 | 31-12-2021 | - | 300 |
| 2 | 8 | 31-01-2022 | 300 | 300 |
| 2 | 8 | 28-02-2022 | - | - |
| 2 | 8 | 31-03-2022 | - | - |
| 2 | 8 | 30-04-2022 | - | - |
| 2 | 8 | 31-05-2022 | - | - |
| 2 | 8 | 30-06-2022 | - | - |
| 2 | 8 | 31-07-2022 | - | - |
+----+-----------------------+------------+----------+----------------+
感谢有关窗口参数或任何其他类型解决方案的任何帮助。
对不起,非英语母语
非常感谢。
【问题讨论】:
标签: python pandas time-series rolling-computation