【问题标题】:Calculate difference between current row and latest row satisfying a condition计算满足条件的当前行和最新行之间的差异
【发布时间】:2022-01-16 10:30:43
【问题描述】:

我有一个看起来像的熊猫数据框。

    time value group
0   1   12  1
1   2   14  1
2   3   15  2
3   4   15  1
4   5   18  2
5   6   20  1
6   7   19  2
7   8   24  2

我知道想要计算第 1 组和第 2 组之间的差值以获得最新值。 IE。在每一行中,我想查看第 1 组和第 2 组的最新值并计算第 1 组的值 - 第 2 组的值。

在示例中,输出应如下所示

    time value group diff
0   1   12  1 0
1   2   14  1 0
2   3   15  2 -1
3   4   15  1 0
4   5   18  2 -3
5   6   20  1 2
6   7   19  2 1
7   8   24  2 -4

到目前为止,我能找到的唯一函数是 pd.diff(),但它不能满足我的需要。所以我真的很感激这里的一些帮助。谢谢!

【问题讨论】:

  • 最新是指第 1 组中的最后一个值和第 2 组中的最后一个值吗?最后的值是否总是每个组的最大值?

标签: python pandas dataframe lambda difference


【解决方案1】:

您可以先分别转发group 1和2的填充值,然后计算差值:

df['diff'] = df.value.where(df.group == 1).ffill() - df.value.where(df.group == 2).ffill()
df
   time  value  group  diff
0     1     12      1   NaN
1     2     14      1   NaN
2     3     15      2  -1.0
3     4     15      1   0.0
4     5     18      2  -3.0
5     6     20      1   2.0
6     7     19      2   1.0
7     8     24      2  -4.0

如果需要填写NaN,请使用fillna -- df['diff'] = df['diff'].fillna(0)。

【讨论】:

  • 或df.value.where(df.group == 1).ffill().sub(df.value.where(df.group == 2).ffill()).fillna(0) 为该代码 + fillna 在一行中。
  • @user17242583 伟大的一个班轮选项。感谢您添加评论:)
猜你喜欢
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 2020-08-29
  • 2019-12-23
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 2023-02-02
相关资源
最近更新 更多