假設我有下一個 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,所有其他類似的問題對我沒有幫助。預期的 df 應該是:
item_code continuous_days
8028558104973 3
8028558104973 2
7622300443269 1
7622300443269 2
513082 3
一旦天數序列中斷,它應該在這個序列中計算天數,然后重新開始計算。目的是,能夠獲得具有count、min、max和mean的資料幀item_code。
像這樣:
item_code no. periods min max mean
8028558104973 2 2 3 2.5
7622300443269 2 1 2 1.5
513082 1 3 3 3
有什么建議么?
uj5u.com熱心網友回復:
連續幾天比較差異 bySeries.diff天 bySeries.dt.days不等于1bySeries.ne與累積總和Series.cumsum然后使用GroupBy.size, 洗掉第二級 byDataFrame.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.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/459829.html
