【问题标题】:Getting days difference from dates in same column in a groupby in Pandas在 Pandas 的 groupby 中获取与同一列中日期的天数差异
【发布时间】:2022-01-15 03:21:13
【问题描述】:
我有一个这样的熊猫数据框:
| user_id |
code |
earliest_date |
| A |
N18.1 |
2016-04-08 |
| A |
N18.2 |
2017-06-08 |
| A |
N18.3 |
2018-04-08 |
| B |
N18.1 |
2016-06-16 |
| B |
N18.2 |
2016-08-16 |
| C |
N18.1 |
2021-01-11 |
在代码列中,值总是形成一个指定的列表,这里是 [N18.1,N18.2,N18.3] 等。
我想要一个数据框,它显示每个用户从代码 N18.x 依次前进到下一个所需的天数。我在想这样的事情:
| user_id |
N18.1 -> N18.2 |
N18.2 -> N18.3 |
| A |
426 |
304 |
| B |
60 |
n/a |
| C |
n/a |
n/a |
您的帮助将不胜感激。
【问题讨论】:
标签:
python
pandas
dataframe
pivot
pandas-groupby
【解决方案1】:
使用DataFrameGroupBy.diff 表示每个组的差异,为移位的code 创建帮助列并传递给DataFrame.pivot:
df['earliest_date'] = pd.to_datetime(df['earliest_date'])
df['diff'] = df.groupby('user_id')['earliest_date'].diff().dt.days
df['code1'] = df.groupby('user_id')['code'].shift() + '->' + df['code']
df = df.pivot('user_id','code1','diff').drop(np.nan, axis=1)
print (df)
code1 N18.1->N18.2 N18.2->N18.3
user_id
A 426.0 304.0
B 61.0 NaN
C NaN NaN