python - 如何计算任何 datetime64 列的第二天分钟差?

标签 python pandas dataframe

Index   DateTimeColumn
5517    2015-04-20 15:27:30
5674    2015-04-20 15:37:30
5675    2015-04-20 15:37:30
5917    2015-04-20 15:49:30
5919    2015-04-20 15:49:30
6619    2015-04-20 16:18:12
6652    2015-04-20 16:36:30
6696    2015-04-20 16:21:42

我想生成一些时间范围,比如从 15:27:30 到 20 分钟。或者找到第二天......有人可以为我推荐这个任务的代码片段吗?

最佳答案

我想你可以使用 pd.offsetsDayMinute:

print df['DateTimeColumn'] + pd.offsets.Minute(20)
0   2015-04-20 15:47:30
1   2015-04-20 15:57:30
2   2015-04-20 15:57:30
3   2015-04-20 16:09:30
4   2015-04-20 16:09:30
5   2015-04-20 16:38:12
6   2015-04-20 16:56:30
7   2015-04-20 16:41:42
Name: DateTimeColumn, dtype: datetime64[ns]

print df['DateTimeColumn'] + pd.offsets.Day()
0   2015-04-21 15:27:30
1   2015-04-21 15:37:30
2   2015-04-21 15:37:30
3   2015-04-21 15:49:30
4   2015-04-21 15:49:30
5   2015-04-21 16:18:12
6   2015-04-21 16:36:30
7   2015-04-21 16:21:42
Name: DateTimeColumn, dtype: datetime64[ns]

您可以创建新的:

df['Minutes20'] = df['DateTimeColumn'] + pd.offsets.Minute(20)
df['NextDay'] = df['DateTimeColumn'] + pd.offsets.Day()
print df
   Index      DateTimeColumn           Minutes20             NextDay
0   5517 2015-04-20 15:27:30 2015-04-20 15:47:30 2015-04-21 15:27:30
1   5674 2015-04-20 15:37:30 2015-04-20 15:57:30 2015-04-21 15:37:30
2   5675 2015-04-20 15:37:30 2015-04-20 15:57:30 2015-04-21 15:37:30
3   5917 2015-04-20 15:49:30 2015-04-20 16:09:30 2015-04-21 15:49:30
4   5919 2015-04-20 15:49:30 2015-04-20 16:09:30 2015-04-21 15:49:30
5   6619 2015-04-20 16:18:12 2015-04-20 16:38:12 2015-04-21 16:18:12
6   6652 2015-04-20 16:36:30 2015-04-20 16:56:30 2015-04-21 16:36:30
7   6696 2015-04-20 16:21:42 2015-04-20 16:41:42 2015-04-21 16:21:42

您可以通过 normalize 找到下一个 Day 的差异:

#df['Minutes20'] = df['DateTimeColumn'] + pd.offsets.Minute(20)
df['NextDay'] = df['DateTimeColumn'] + pd.offsets.Day()
df['NextDayNorm'] = df['NextDay'].dt.normalize() 
df['NextDayDiff'] = df['NextDay'].dt.normalize() - df['DateTimeColumn']
print df
   Index      DateTimeColumn             NextDay NextDayNorm  NextDayDiff
0   5517 2015-04-20 15:27:30 2015-04-21 15:27:30  2015-04-21     08:32:30
1   5674 2015-04-20 15:37:30 2015-04-21 15:37:30  2015-04-21     08:22:30
2   5675 2015-04-20 15:37:30 2015-04-21 15:37:30  2015-04-21     08:22:30
3   5917 2015-04-20 15:49:30 2015-04-21 15:49:30  2015-04-21     08:10:30
4   5919 2015-04-20 15:49:30 2015-04-21 15:49:30  2015-04-21     08:10:30
5   6619 2015-04-20 16:18:12 2015-04-21 16:18:12  2015-04-21     07:41:48
6   6652 2015-04-20 16:36:30 2015-04-21 16:36:30  2015-04-21     07:23:30
7   6696 2015-04-20 16:21:42 2015-04-21 16:21:42  2015-04-21     07:38:18

如果要按时间范围选择,首先将列 DateTimeColumn 设置为索引,然后设置 indexer_between_time :

print df
   Index      DateTimeColumn
0   5517 2015-04-20 15:27:30
1   5674 2015-04-20 15:37:30
2   5675 2015-04-20 15:37:30
3   5917 2015-04-20 15:49:30
4   5675 2015-04-21 15:37:30
5   5917 2015-04-22 15:49:30
6   5919 2015-04-23 15:49:30
7   6619 2015-04-20 16:18:12
8   6652 2015-04-20 16:36:30
9   6696 2015-04-20 16:21:42

start = pd.to_datetime('15:27:30').time()
end = pd.to_datetime('15:47:30').time()
print start
15:27:30
print end
15:47:30

df.index = df['DateTimeColumn']
print df.ix[df.index.indexer_between_time(start, end)]
                     Index      DateTimeColumn
DateTimeColumn                                
2015-04-20 15:27:30   5517 2015-04-20 15:27:30
2015-04-20 15:37:30   5674 2015-04-20 15:37:30
2015-04-20 15:37:30   5675 2015-04-20 15:37:30
2015-04-21 15:37:30   5675 2015-04-21 15:37:30

您可以通过偏移创建开始结束时间:

startdate = pd.to_datetime('15:27:30')
enddate = startdate + pd.offsets.Minute(20)

start = startdate.time()
end = enddate.time()
print start
15:27:30
print end
15:47:30

关于python - 如何计算任何 datetime64 列的第二天分钟差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36092889/

相关文章:

python - 按行中的值选择 Pandas 数据框中的列

python - 如何按年份和日期分组,并在 pandas 中汇总总和

python - 在 pandas 数据框中重复行

python - 如何让 python 在 osx 上加载 dylib

python - 为什么列表不允许带有格式字符串?

python - 来自多人游戏的 1 对 1 比较

python - 如何将函数应用于数据框列

python - 矢量化数据帧查找

python - 如何在 Python 中拆分字符串,直到从右到左出现特定字符之一?

python - 如何键入具有封闭类类型的提示方法?