我想计算每个销售代理不同时间段之间价值的绝对差异。
所以从这个数据集:
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
Run Code Online (Sandbox Code Playgroud)
我想得到这样的结果:
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
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
two['pct_change'] = one.groupby(['Report month','ID Vendedor'])['sum'].pct_change()
Run Code Online (Sandbox Code Playgroud)
这是我得到的结果:
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
Run Code Online (Sandbox Code Playgroud)
我知道 pct_change 返回百分比变化,但我打算将此百分比转换为绝对数字
使用DataFrameGroupBy.diff有DataFrame.sort_values:
#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
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)
我们还可以使用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)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |