示例:
testDf = pl.DataFrame({
"Date1": ["2024-04-01", "2024-04-06", "2024-04-07", "2024-04-10", "2024-04-11"],
"Date2": ["2024-04-04", "2024-04-07", "2024-04-09", "2024-04-10", "2024-04-15"],
"Date3": ["2024-04-07", "2024-04-08", "2024-04-10", "2024-05-15", "2024-04-21"],
'Value': [10, 15, -20, 5, 30]
}).with_columns(pl.col('Date1').cast(pl.Date),
pl.col('Date2').cast(pl.Date),
pl.col('Date3').cast(pl.Date)
)
shape: (5, 4)
┌────────────┬────────────┬────────────┬───────┐
│ Date1 ┆ Date2 ┆ Date3 ┆ Value │
│ --- ┆ --- ┆ --- ┆ --- │
│ date ┆ date ┆ date ┆ i64 │
╞════════════╪════════════╪════════════╪═══════╡
│ 2024-04-01 ┆ 2024-04-04 ┆ 2024-04-07 ┆ 10 │
│ 2024-04-06 ┆ 2024-04-07 ┆ 2024-04-08 ┆ 15 │
│ 2024-04-07 ┆ 2024-04-09 ┆ 2024-04-10 ┆ -20 │
│ 2024-04-10 ┆ 2024-04-10 ┆ 2024-05-15 ┆ 5 │
│ 2024-04-11 ┆ 2024-04-15 ┆ 2024-04-21 ┆ 30 │
└────────────┴────────────┴────────────┴───────┘
我想做的是创建一个数据框,其中对于每个'日期1'我将有一个'值'的累积和的列,其中'日期1'='日期2'和'日期1'='日期3'.>< 因此,当'Date1'='2024—04—10'时,总和应为—15,因为前两行'Date3'='2024—04—10',最后一行为'Date2'='2024—04—15'='2024—04—10'.<>
我试过这个:
testDf.group_by(pl.col('Date1'))\
.agg(pl.col('Value')\
.filter((pl.col('Date1') >= pl.col('Date2')) & (pl.col('Date1') <= pl.col('Date3')))\
.sum())
shape: (5, 2)
┌────────────┬───────┐
│ Date1 ┆ Value │
│ --- ┆ --- │
│ date ┆ i64 │
╞════════════╪═══════╡
│ 2024-04-11 ┆ 0 │
│ 2024-04-06 ┆ 0 │
│ 2024-04-07 ┆ 0 │
│ 2024-04-10 ┆ 5 │
│ 2024-04-01 ┆ 0 │
└────────────┴───────┘
但我想要的结果是:
shape: (5, 2)
┌────────────┬─────┐
│ Date1 ┆ Sum │
│ --- ┆ --- │
│ date ┆ i64 │
╞════════════╪═════╡
│ 2024-04-01 ┆ 0 │
│ 2024-04-06 ┆ 10 │
│ 2024-04-07 ┆ 25 │
│ 2024-04-10 ┆ -15 │
│ 2024-04-11 ┆ 5 │
└────────────┴─────┘