返回时间段之间的绝对差

问题描述 投票:3回答:3

我想计算每个销售代理商在不同时间段之间的值的绝对差。

因此来自此数据集:

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返回百分比变化,但是我打算将此百分比转换为绝对数字

python pandas
3个回答
5
投票

DataFrameGroupBy.diffDataFrameGroupBy.diff一起使用:

DataFrame.sort_values

5
投票

使用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.assignGroupBy.diff

GroupBy.diff

0
投票

您可以在对数据框进行排序后使用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
© www.soinside.com 2019 - 2024. All rights reserved.