我有一个像这样的pandas数据集:
user_id datetime
1 13 days 21:50:00
2 0 days 02:05:00
5 10 days 00:10:00
7 2 days 01:20:00
1 3 days 11:50:00
2 1 days 02:30:00
我想要一个包含minues的列,所以在这种情况下结果可以是:
user_id datetime minutes
1 13 days 21:50:00 20030
2 0 days 02:05:00 125
5 10 days 00:10:00 14402
7 2 days 01:20:00 2960
1 3 days 11:50:00 5030
2 1 days 02:30:00 1590
没有循环有没有办法做到这一点?
答案 0 :(得分:10)
是的,日期/时间序列有一个特殊的dt
accessor:
df['minutes'] = df['datetime'].dt.total_seconds() / 60
如果您只需要整分钟,请使用.astype(int)
投射结果。
答案 1 :(得分:2)
这是pd.Timedelta
的一种方式:
df['minutes'] = pd.to_timedelta(df.datetime) / pd.Timedelta(1, 'm')
>>> df
user_id datetime minutes
0 1 13 days 21:50:00 20030.0
1 2 0 days 02:05:00 125.0
2 5 10 days 00:10:00 14410.0
3 7 2 days 01:20:00 2960.0
4 1 3 days 11:50:00 5030.0
5 2 1 days 02:30:00 1590.0
如果您的datetime
列已经是dtype timedelta
,则可以省略显式转换,只需使用:
df['minutes'] = df.datetime / pd.Timedelta(1, 'm')