我想计算每个销售代理不同时间段之间值(value)的绝对差异。
所以从这个数据集:
Report month ID Vendedor sum count Rental Charge
2018-07-01 803621.0 780.81 42 4
2018-07-01 900000.0 100.90 20 5
2018-08-01 803621.0 1132.71 77 3
2018-08-01 900000.0 1000.10 10 2
我想得到这样的结果:
Report month ID Vendedor sum count Rental Charge Diff
2018-07-01 803621.0 780.81 42 4 0
2018-08-01 803621.0 1132.71 77 3 351.90
2018-07-01 900000.0 100.90 20 5 0
2018-08-01 900000.0 1000.10 10 2 899.20
这是我尝试过的:
two['pct_change'] = one.groupby(['Report month','ID Vendedor'])['sum'].pct_change()
这是我得到的结果:
Report month ID Vendedor sum count Rental Charge Pct_change
2018-07-01 803621.0 780.81 42 4 NaN
2018-08-01 803621.0 1132.71 77 3 NaN
2018-07-01 900000.0 100.90 20 5 NaN
2018-08-01 900000.0 1000.10 10 2 NaN
我知道 pct_change 返回百分比变化,但我打算将此百分比转换为绝对数字
最佳答案
使用 DataFrame.sort_values
对数据帧进行排序,
那么我们可以使用 DataFrame.assign
和 GroupBy.diff
创建 Diff
柱子:
new_df = (df.sort_values(['ID Vendedor','Report month'])
.assign(Diff = lambda x: x.groupby('ID Vendedor')['sum']
.diff().fillna(0))
)
print(new_df)
Report month ID Vendedor sum count Rental Charge Diff
0 2018-07-01 803621.0 780.81 42 4 0.0
2 2018-08-01 803621.0 1132.71 77 3 351.9
1 2018-07-01 900000.0 100.90 20 5 0.0
3 2018-08-01 900000.0 1000.10 10 2 899.2
我们也可以使用
GroupBy.shift
和 Series.sub
(df.sort_values(['ID Vendedor','Report month'])
.assign(Diff = lambda x: x['sum'].sub(x.groupby('ID Vendedor')['sum']
.shift())
.fillna(0)))
关于python - 返回时间段之间的绝对差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60149112/