我有一个Dataframe:
d = {'User': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C', 'C'], 'Date' : ['2017-10-21', '2017-10-24', '2017-10-29', '2017-09-30', '2017-10-23', '2017-10-31', '2017-11-02', '2017-11-03', '2017-11-03']}
df = pd.Dataframe(data=d)
看起来像:
User Date
A 2017-10-21
A 2017-10-24
A 2017-10-29
B 2017-09-30
B 2017-10-23
C 2017-10-31
C 2017-11-02
C 2017-11-03
C 2017-11-03
我想要的是添加另一列来查找每个用户的日期之间的差异:从最早的日期(因此差异为0)开始到下一个日期,以及下一个日期到之后的日期,依此类推。
Dataframe将如下所示:
User Date Difference
A 2017-10-21 0
A 2017-10-24 3
A 2017-10-29 5
B 2017-09-30 0
B 2017-10-23 23
C 2017-10-31 0
C 2017-11-02 2
C 2017-11-03 1
C 2017-11-03 0
注意:用户和日期已经在原始数据框中排序。
答案 0 :(得分:1)
我认为需要groupby
与diff
,转换timedeltas添加days
:
#if necessary sorting
#df = df.sort_values(['User','Date'])
df['Difference'] = df.groupby('User')['Date'].diff().dt.days.fillna(0).astype(int)
print (df)
User Date Difference
0 A 2017-10-21 0
1 A 2017-10-24 3
2 A 2017-10-29 5
3 B 2017-09-30 0
4 B 2017-10-23 23
5 C 2017-10-31 0
6 C 2017-11-02 2
7 C 2017-11-03 1
8 C 2017-11-03 0