在 Pandas 中获取与 groupby 中同一列中日期的天数差异
Getting days difference from dates in same column in a groupby in Pandas
我有一个这样的 pandas 数据框:
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
非常感谢您的帮助。
使用DataFrameGroupBy.diff
for differecies per groups, create helper column for shifted code
and pass to 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
我有一个这样的 pandas 数据框:
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 |
非常感谢您的帮助。
使用DataFrameGroupBy.diff
for differecies per groups, create helper column for shifted code
and pass to 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