Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在带有日期戳的分组多索引数据帧上使用pct_更改_Python_Pandas - Fatal编程技术网

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'))