python - 从 Pandas 数据框中获取同比百分比

标签 python pandas

如果我有一个包含“count”、“w”、“c”、“d”和“y”列的数据框 样本数据如下所示:

131    1    dir    mob    2017
244    1    dir    mob    2018
311    1    org    mob    2017
332    1    org    mob    2018
212    2    dir    dsk    2017
311    2    dir    dsk    2018
401    2    org    mob    2017
283    2    org    mob    2018

获取 2018 年与 2017 年按“w”、“c”、“d”分组的“计数”值的百分比变化的方法是什么?

最佳答案

好吧,您可以对数据进行排序(正如您已有的那样),然后将差异计算为 count 和 count.shift() 之间的差异。

我们分配给数据框的差异我们删除了所有我们不感兴趣的重复行和列:

import pandas as pd

data = '''\
count  w      c      d       y
131    1    dir    mob    2017
244    1    dir    mob    2018
311    1    org    mob    2017
332    1    org    mob    2018
212    2    dir    dsk    2017
311    2    dir    dsk    2018
401    2    org    mob    2017
283    2    org    mob    2018'''

df = pd.read_csv(pd.compat.StringIO(data), sep='\s+')

df.sort_values(by=['w','c','d','y'], inplace=True) # <--- sort values 

diff = (df['count'].shift(-1) - df['count'])/df['count'][::2] # <--- calculate % change

dfnew = df.drop_duplicates(('w','c','d')).drop(['y','count'],axis=1).assign(diff=diff)

print(dfnew)

返回:

   w    c    d      diff
0  1  dir  mob  0.862595
2  1  org  mob  0.067524
4  2  dir  dsk  0.466981
6  2  org  mob -0.294264

您可以添加此验证器来检查您是否获得了正确列的数量:

sum(df[['w','c','d']].duplicated()) == len(df)/2  # <-- This should return True

关于python - 从 Pandas 数据框中获取同比百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50240646/

相关文章:

python - 在 Pandas 中划分直方图

python - 向数据透视表添加了新的类别和小计列

python - 如何添加复制某些列的新行,但在其他列中分配新值

python - 使用 Python OneDrive SDK 将文件上传到 MS SharePoint

python - 测量金属零件孔径的图片,远心拍摄,单色相机用opencv

python - 在 Python 3 中对 csv 文件使用正确的编码

python - 如何获得 pandas 列中连续 1 的最大计数

python - 将文本格式的数据读入 Python Pandas 数据框

Python/tkinter : elapsed time in label/updating a label constantly?

python - 如何在 Python 3.6.4 (Windows) 上安装 Pillow