我想计算每个销售代理商在不同时间段之间的值的绝对差。
因此来自此数据集:
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返回百分比变化,但是我打算将此百分比转换为绝对数字
将DataFrameGroupBy.diff
与DataFrameGroupBy.diff
一起使用:
DataFrame.sort_values
使用DataFrame.sort_values
对DataFrame进行排序然后我们可以使用#if necessary
#one = one.sort_values('Report month')
one['diff'] = one.groupby('ID Vendedor')['sum'].diff().fillna(0)
one = one.sort_values('ID Vendedor')
print (one)
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
和DataFrame.sort_values
创建DataFrame.sort_values
列:
DataFrame.assign
我们也可以使用DataFrame.assign
和GroupBy.diff
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