【问题标题】:How do I calculate the first value in each group from every other value in the group to calculate change over time?如何从组中的每个其他值计算每个组中的第一个值以计算随时间的变化?
【发布时间】:2021-02-06 15:39:45
【问题描述】:

在 R 中,我可以计算数据集中每个组随时间的变化,如下所示:

df %>% 
  group_by(z) %>%
  mutate(diff = y - y[x == 0])

pandas 中的等价物是什么?

我知道使用 pandas 可以像这样减去列的第一个值:

df['diff'] = df.y-df.y.iloc[0]

但是如何按变量 z 分组?

示例数据:

x   y   z
0   2   A
5   4   A
10  6   A
0   1   B
5   3   B
10  9   B

预期输出:

x   y   z   diff
0   2   A   0
5   4   A   2
10  6   A   4
0   1   B   0
5   5   B   4
10  9   B   8

【问题讨论】:

  • 您能提供示例数据和预期输出吗?
  • df['diff'] = df['y'].sub(df.groupby('z')['y'].transform('first'))df.groupby('z')['y'].diff()?
  • @ansev 感谢您的快速单行回答,正是我正在寻找的那种东西!
  • 那你为什么接受?答案?我可以像回答一样发布评论,如果你愿意,你可以接受它:)
  • 对不起,两个答案都很好,但你的更简洁一些。

标签: python r pandas dplyr


【解决方案1】:

你可以试试这个。

temp = df.groupby('z').\
    apply(lambda g: g.y - g.y[0]).\
    reset_index().\
    rename(columns={'y': 'diff'}).\
    drop('z', axis=1)

df.merge(temp, how='inner', left_index=True, right_on='level_1').\
    drop('level_1', axis=1)

返回:

x   y   z   diff
0   2   A   0
5   4   A   2
10  6   A   4
0   1   B   0
5   5   B   4
10  9   B   8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2019-08-13
    • 2017-07-20
    • 1970-01-01
    • 2017-06-25
    • 2020-10-06
    • 1970-01-01
    相关资源
    最近更新 更多