我有一个pandas数据帧,其时间以小时为单位:分钟格式(例如09:35),我希望在B列中的连续时间与A列中的相关键之间得到区别。
数据如下所示:
A B
1 key1 09:12
2 key1 09:15
3 key1 09:21
4 key2 10:21
5 key2 10:27
6 key2 10:32
输出应该是这样的:
A B
1 key1 00:00
2 key1 00:03
3 key1 00:06
4 key2 00:00
5 key2 00:06
6 key2 00:05
或类似的东西:
A B
1 key1 0
2 key1 3
3 key1 6
4 key2 0
5 key2 6
6 key2 5
我知道如果B列中的数据是整数,我们可以这样做:
df['B'] = df.groupby('A')['B'].diff().fillna(0).astype(int)
但是,B列中的数据不是整数,而是时间格式。
感谢您解决此问题的任何帮助。
答案 0 :(得分:1)
计划
pd.to_datetime
将%H:%M
格式转换为Timestamp
s。是的,日期不正确。但是,一旦我们使用diff
groupby
列'A'
并使用diff
转换为Timedelta
s pd.to_datetime
,因此我们可以使用dt.strftime
并格式化回'%H:%M'
pd.to_datetime(df.B).groupby(df.A).diff().fillna(0)
1 00:00:00
2 00:03:00
3 00:06:00
4 00:00:00
5 00:06:00
6 00:05:00
Name: B, dtype: timedelta64[ns]
pd.to_datetime(
pd.to_datetime(df.B).groupby(df.A).diff().fillna(0)
).dt.strftime('%H:%M')
1 00:00
2 00:03
3 00:06
4 00:00
5 00:06
6 00:05
Name: B, dtype: object
pd.to_datetime(df.B) \
.groupby(df.A).diff() \
.fillna(0).dt.total_seconds() \
.div(60).astype(int)
1 0
2 3
3 6
4 0
5 6
6 5
Name: B, dtype: int64