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