![](/img/trans.png)
[英]Python - Pandas - Groupby - Value (not days) difference between two dates
[英]Getting days difference from dates in same column in a groupby in Pandas
我有一个 pandas dataframe 像这样:
用户身份 | 代码 | 最早的日期 |
---|---|---|
一个 | N18.1 | 2016-04-08 |
一个 | N18.2 | 2017-06-08 |
一个 | N18.3 | 2018-04-08 |
乙 | N18.1 | 2016-06-16 |
乙 | N18.2 | 2016-08-16 |
C | N18.1 | 2021-01-11 |
在代码列中,值总是形成一个指定的列表,这里是 [N18.1,N18.2,N18.3] 等。
我想要一个 dataframe 来显示每个用户从代码 N18.x 依次前进到下一个所需的天数。 我在想这样的事情:
用户身份 | N18.1 -> N18.2 | N18.2 -> N18.3 |
---|---|---|
一个 | 426 | 304 |
乙 | 60 | 不适用 |
C | 不适用 | 不适用 |
您的帮助将不胜感激。
对每个组使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.