我有每個客戶的使用資料,在幾年內每月收集,形狀為 ~(6000, 60)。
示例資料框:
df = pd.DataFrame({'id': ['user_1', 'user_2'], 'access_type': ['mobile', 'desktop'], '2018-09-01 00:00:00': [7,5], '2018-10-01 00:00:00':[1,3], '2018-11-01 00:00:00':[0,10]})
id access_type 2018-09-01 00:00:00 2018-10-01 00:00:00 2018-11-01 00:00:00
0 user_1 mobile 7 1 0
1 user_2 desktop 5 3 10
如何將 40 個選定的日期列更改為日期時間索引 (?) 格式或其他允許選擇/切片所需時間段作為日期的格式?
uj5u.com熱心網友回復:
使用DataFrame.melt有DataFrame.set_index:
df2 = (df.melt(['id','access_type'], var_name='date')
.assign(date = lambda x: pd.to_datetime(x['date']))
.set_index('date'))
print (df2)
id access_type value
date
2018-09-01 user_1 mobile 7
2018-09-01 user_2 desktop 5
2018-10-01 user_1 mobile 1
2018-10-01 user_2 desktop 3
2018-11-01 user_1 mobile 0
2018-11-01 user_2 desktop 10
如果需要MultiIndex使用set_index有DataFrame.stack:
s = (df.set_index(['id','access_type'])
.stack()
.rename(index = lambda x: pd.to_datetime(x), level=2))
print (s)
或者:
s = (df.melt(['id','access_type'], var_name='date')
.assign(date = lambda x: pd.to_datetime(x['date']))
.set_index(['id','access_type','date'])['value'])
print (s)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/353678.html
