Python 在带有日期戳的分组多索引数据帧上使用pct_更改
我有以下数据帧Python 在带有日期戳的分组多索引数据帧上使用pct_更改,python,pandas,Python,Pandas,我有以下数据帧df: datestamp device country users 2021-01-14 ipad uk 10 2021-01-14 iphone uk 15 2021-01-14 ipad us 20 2021-01-14 iphone us 40 2021-01-14 ipad
df
:
datestamp device country users
2021-01-14 ipad uk 10
2021-01-14 iphone uk 15
2021-01-14 ipad us 20
2021-01-14 iphone us 40
2021-01-14 ipad fr 100
2021-01-14 iphone fr 50
2021-01-15 ipad uk 20
2021-01-15 iphone uk 10
2021-01-15 ipad us 20
2021-01-15 iphone us 60
2021-01-15 ipad fr 300
2021-01-15 iphone fr 500
我想知道每个邮戳设备国家/地区列的用户
的百分比变化
我试过:
df.groupby(['datestamp','country', 'device']).count().pct_change().reset_index()
但它忽略了分组,只是逐行检查
预期结果如下所示:
datestamp device country users change
2021-01-14 ipad uk 10 np.nan
2021-01-14 iphone uk 15 np.nan
2021-01-14 ipad us 20 np.nan
2021-01-14 iphone us 40 np.nan
2021-01-14 ipad fr 100 np.nan
2021-01-14 iphone fr 50 np.nan
2021-01-15 ipad uk 20 100%
2021-01-15 iphone uk 10 -33%
2021-01-15 ipad us 20 0%
2021-01-15 iphone us 60 50%
2021-01-15 ipad fr 300 300%
2021-01-15 iphone fr 500 1000%
看起来您需要每个设备
/国家/地区
组合的百分比变化。这种变化反映了一年比一年的变化。在这种情况下,您不希望按日期戳进行分组。相反,您应该按照日期戳
和分组方式设备
和国家
:
df['change'] = df.sort_values('datestamp') \
.groupby(['device', 'country']) \
.users \
.pct_change() \
.mul(100)
df
# datestamp device country users change
#0 2021-01-14 ipad uk 10 NaN
#1 2021-01-14 iphone uk 15 NaN
#2 2021-01-14 ipad us 20 NaN
#3 2021-01-14 iphone us 40 NaN
#4 2021-01-14 ipad fr 100 NaN
#5 2021-01-14 iphone fr 50 NaN
#6 2021-01-15 ipad uk 20 100.000000
#7 2021-01-15 iphone uk 10 -33.333333
#8 2021-01-15 ipad us 20 0.000000
#9 2021-01-15 iphone us 60 50.000000
#10 2021-01-15 ipad fr 300 200.000000
#11 2021-01-15 iphone fr 500 900.000000
我还将在最后对表进行排序,以便您可以更好地看到更改:df.sort_值(['device'、'country'、'datestamp'))