迭代 Pandas 数据框上的唯一日期
Posted
技术标签:
【中文标题】迭代 Pandas 数据框上的唯一日期【英文标题】:Iterate over unique dates on a Pandas dataframe 【发布时间】:2020-10-29 19:58:43 【问题描述】:我有一个这样的熊猫数据框
id date time dif
01 2020-04-02 09:44:00
02 2020-04-02 09:50:23
03 2020-04-02 09:54:56
04 2020-04-03 10:24:42
05 2020-04-03 10:32:12
06 2020-04-03 11:12:21
...
我要做的是计算每一行与每天前一行之间的时间差(以分钟为单位)。所以结果应该是这样的
id date time dif
01 2020-04-02 09:44:00 6
02 2020-04-02 09:50:23 4
03 2020-04-02 09:54:56
04 2020-04-03 10:24:42 7
05 2020-04-03 10:32:12 40
06 2020-04-03 11:12:21
...
我的第一个想法是创建一个包含日期列唯一值的列表并尝试了这个:
import pandas a dp
import numpy as np
...
dates = df.date.unique()
for d in dates:
df['dif'] = round(df['time'].diff(-1).dt.total_seconds().div(60),0) * -1
但我认为这并不容易......
【问题讨论】:
【参考方案1】:将DataFrameGroupBy.diff
与Series.dt.total_seconds
和Series.round
一起使用:
df['time'] = pd.to_timedelta(df['time'])
df['dif'] = df.groupby('date')['time'].diff(-1).dt.total_seconds().div(60).round().mul(-1)
或者使用DataFrameGroupBy.shift
进行减法:
df['dif'] = (df.groupby('date')['time'].shift(-1)
.sub(df['time'])
.dt.total_seconds()
.div(60)
.round())
print (df)
id date time dif
0 1 2020-04-02 09:44:00 6.0
1 2 2020-04-02 09:50:23 5.0
2 3 2020-04-02 09:54:56 NaN
3 4 2020-04-03 10:24:42 8.0
4 5 2020-04-03 10:32:12 40.0
5 6 2020-04-03 11:12:21 NaN
【讨论】:
以上是关于迭代 Pandas 数据框上的唯一日期的主要内容,如果未能解决你的问题,请参考以下文章