Skip to main content
 首页 » 编程设计

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

2025年05月04日13jirigala

如果我有一个包含“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