我有一个问题,我试图解决最好使用polars,但Pandas也很好。假设我们有以下数据集(示例):
{
"date" : [2022-01-01, 2022-01-02, 2022-01-03, 2022-01-04, 2022-01-05],
"customers" : [3, 4, 5, 3, 2],
"is_reporting_day?" : [True, False, False, False, True]
}
为了使它更清楚一点,这里有一个表格格式
| 日期|客户服务|报告日是什么时候?|
| --------------|--------------|--------------|
| 2022-01-01 2022-01-01|三|真的|
| 2022-01-02 2022-01-02|四|假的|
| 2022-01-03 2022-01-03|五|假的|
| 2022年1月4日|三|假的|
| 2022-01-05 2022-01-05|二|真的|
我想得到的是:如果reporting_day is True
保持客户数量不变,如果reporting_day is False
我想将所有客户(4,5,3 = 12 + 2 = 14)相加并将其添加到下一个True value reporting day
因此,在应用转换之后,它应该看起来像这样:
| 日期|客户服务|报告日是什么时候?|客户服务|
| --------------|--------------|--------------|--------------|
| 2022-01-01 2022-01-01|三|真的|三|
| 2022-01-05 2022-01-05|二|真的|十四岁|
我试过在polars中使用pl.when
语句来使用cumsum()
函数,但这是不正确的逻辑,因为它从一开始就总结,即第一天(大约有700天)。
注意:解决方案应该是动态的,即有时reporting_day和non-reporting_day之间差距是1天、2天等。
任何想法或投入是高度赞赏!提前感谢!
3条答案
按热度按时间wmvff8tz1#
使用@mozway的方法,在polars中几乎是一样的:
如果希望保留原始行,可以使用
.over()
。z9smfwbn2#
假设日期已经排序,使用
groupby.agg
:输出:
如果您需要“客户”的初始值和总和:
输出:
备选方案:
flvlnr443#
输出: