假设我有下一个df N03_zero (date_code已经是datetime):
item_code date_code
8028558104973 2022-01-01
8028558104973 2022-01-02
8028558104973 2022-01-03
8028558104973 2022-01-06
8028558104973 2022-01-07
7622300443269 2022-01-01
7622300443269 2022-01-10
7622300443269 2022-01-11
513082 2022-01-01
513082 2022-01-02
513082 2022-01-03将date_code分配给某些item_code的数百万行。我试图得到每个item_code的每一个连续周期的天数,所有其他类似的问题都无助于我。预期的发展方向应该是:
item_code continuous_days
8028558104973 3
8028558104973 2
7622300443269 1
7622300443269 2
513082 3一旦天序列中断,它应该在这个序列中计数天数,然后再开始计数。目标是,能够为每个count、min、max和mean获取数据格式。
如下所示:
item_code no. periods min max mean
8028558104973 2 2 3 2.5
7622300443269 2 1 2 1.5
513082 1 3 3 3有什么建议吗?
发布于 2022-04-19 08:30:46
连续几天,用Series.diff比较Series.dt.days对不相等的1与Series.cumsum的累积和的天数之差,然后使用GroupBy.size,用DataFrame.droplevel删除二级,创建DataFrame。
df['date_code'] = pd.to_datetime(df['date_code'])
df1= (df.groupby(['item_code',df['date_code'].diff().dt.days.ne(1).cumsum()], sort=False)
.size()
.droplevel(1)
.reset_index(name='continuous_days'))
print (df1)
item_code continuous_days
0 8028558104973 3
1 8028558104973 2
2 7622300443269 1
3 7622300443269 2
4 513082 3然后通过GroupBy.agg命名聚合来聚合值。
df2 = (df1.groupby('item_code', sort=False, as_index=False)
.agg(**{'no. periods': ('continuous_days','size'),
'min':('continuous_days','min'),
'max':('continuous_days','max'),
'mean':('continuous_days','mean')}))
print (df2)
item_code no. periods min max mean
0 8028558104973 2 2 3 2.5
1 7622300443269 2 1 2 1.5
2 513082 1 3 3 3.0https://stackoverflow.com/questions/71921857
复制相似问题