返回时间段之间的绝对差值

2024-04-23 09:01:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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

因此,从这个数据集:

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返回百分比变化,但我想把这个百分比转换成一个绝对数


Tags: reportid代理count差异nanchange百分比
3条回答

^{}^{}一起使用:

#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

使用^{} 要对数据帧进行排序, 然后我们可以使用^{}^{}来创建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

我们也可以使用^{}^{}

(df.sort_values(['ID Vendedor','Report month'])
   .assign(Diff = lambda x: x['sum'].sub(x.groupby('ID Vendedor')['sum']
                                          .shift())
                                    .fillna(0)))

在对数据帧进行排序后,可以使用diff执行此操作:

# Sort
df = df.sort_values(by=['ID Vendedor', 'Report month'])

# Compute diff
df['Diff'] = df['sum'].diff()

# Set to 0 when vendor changes
mask = df['ID Vendedor'] != df['ID Vendedor'].shift(1)
df.loc[mask, 'Diff'] = 0

# Sort again?
df = df.sort_values(by='Report month')

相关问题 更多 >