python - 返回时间段之间的绝对差异

标签 python pandas

我想计算每个销售代理不同时间段之间值(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/

相关文章:

python - 给定 2 个整数列表如何找到不重叠的范围?

python - 如何将 pandas 数据透视表转换为常规数据框

python - pandas - 为什么不能使用 DataFrame.apply 设置某些列 Categorical

python - 计算列表中相同索引的平均值,python

python - mysqldb 数据库存储在 RAM 中

python - 如何根据条形图的值在 matplotlib 中创建自定义图例?

python - 如何将两列 csv 文件转换为 python 中的字典

python - 当涉及 if 语句以及将其他函数导入 if 语句时,我遇到了麻烦

python - 在 Python 中获取代码点的 Unicode 版本

python - 访问数据框的最后一个索引值