【发布时间】:2019-04-16 15:08:58
【问题描述】:
我想根据在前一行中找到的值在 pandas 数据框中创建一个新列。
具体来说,我想添加一列,其中在实际行中找到的日期与在前一行中找到的最后一个日期之间的差异(以天为单位)具有相同的 userId 和金额 > 0。
我有这个:
+--------+------------+-----------+
| UserId | Date | Amount |
+--------+------------+-----------+
| 1 | 2017-01-01 | 0 |
| 1 | 2017-01-03 | 10 |
| 2 | 2017-01-04 | 20 |
| 2 | 2017-01-07 | 15 |
| 1 | 2017-01-09 | 7 |
+--------+------------+-----------+
我想要这个
+--------+------------+-----------+-------------+
| UserId | Date | Amount | Difference |
+--------+------------+-----------+-------------+
| 1 | 2017-01-01 | 0 | -1 |
| 1 | 2017-01-03 | 10 | -1 |
| 2 | 2017-01-04 | 20 | -1 |
| 2 | 2017-01-07 | 15 | 3 |
| 1 | 2017-01-09 | 7 | 6 |
+--------+------------+-----------+-------------+
【问题讨论】:
-
到目前为止你尝试过什么?您可以使用
pd.timedelta和pd.shift -
我试过
df['difference'] = df.groupby(['UserId']).filter(lambda x: (x['Amount'] > 0).any())['Date'].diff().fillna(-1),但是这样只会修改过滤的列 -
可能
groupby('UserID').max('Date')获取每个 ID 的最后一个日期值,然后执行timedelta将该值传递回原始数据帧