【问题标题】:pandas: shift a column by date but keep the user [duplicate]熊猫:按日期移动一列但保留用户[重复]
【发布时间】:2021-09-27 17:59:39
【问题描述】:

我的数据框看起来像:

user_id date balance
A 1 100
A 2 200
A 3 250
B 2 300
B 3 200

我想创建一个新列,该列是每个用户今天和前一天的余额差。

user_id date balance balance_previous_day
A 1 100 NaN
A 2 200 100
A 3 250 50
B 2 300 NaN
B 3 200 -100

我试过了:

df.groupby (['user_id']).apply (lambda x: np.diff (x.balance, 1))

结果将是:

user_id
A [100, 50]
B [-100]

结果是正确的,但我不知道如何将结果放回数据框。

【问题讨论】:

  • 使用df.groupby(['user_id']).balance.diff()

标签: python pandas


【解决方案1】:

要获取前一天的值,您需要shift,而不是diff。 GroupBy 完成剩下的工作:

>>> df['balance_previous_day'] = df.groupby('user_id')['balance'].shift()
>>> df
  user_id  date  balance  balance_previous_day
0       A     1      100                   NaN
1       A     2      200                 100.0
2       A     3      250                 200.0
3       B     2      300                   NaN
4       B     3      200                 300.0

请注意,这假设您的日子是按每个用户排序的。

要获得差异:

>>> df['balance_change'] = df.groupby('user_id')['balance'].diff()
>>> df
  user_id  date  balance  balance_previous_day  balance_change
0       A     1      100                   NaN             NaN
1       A     2      200                 100.0           100.0
2       A     3      250                 200.0            50.0
3       B     2      300                   NaN             NaN
4       B     3      200                 300.0          -100.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    相关资源
    最近更新 更多