python-3.x - 如何使用python将额外的时间添加到带有数据的时间列中
问题描述
在这里,我有一个包含日期、时间和一个输入列的数据集。所以这里我的时间专栏不好。所以我想在那个时间列中给出时间范围。所以在这里我首先将开始时间转换为 0 并将整个时间列转换为分钟。
然后接下来我想给出时间范围0,60,120....
意思是我预期的输出是:
第一次转换
date time time
10/3/2018 6:15:00 0
10/3/2018 6:45:00 30
10/3/2018 7:45:00 90
10/3/2018 9:00:00 165.0
10/3/2018 9:25:00 190.0
10/3/2018 9:30:00 195.0
10/3/2018 11:00:00 285.0
10/3/2018 11:30:00 315.0
预期产出
time x3
0 7
30 5
60 0
120 0
165 7
180 0
190 7
195 5
240 0
285 7
300 0
315 7
60,120,180...
所以在这里你可以看到为 x3 值不可用添加的额外时间然后添加0
到 x3 列
所以在这里我只想做的是extra 60 min 60 min add to the time column
这里我写了转换时间的代码。但我不知道如何将额外的 60 分钟填充到时间列中。
我的代码:
data['date']= pd.to_datetime(data['date'] + " " + data['time'],
format='%d/%m/%Y %H:%M:%S', dayfirst=True)
lastday = data.loc[0, 'date']
def convert_time(x):
global lastday
if x.date() == lastday.date():
tm = x - lastday
return tm.total_seconds()/60
else:
lastday = x
return 0
data['time'] = data['date'].apply(convert_time)
谁能帮我解决这个问题?
我的 csv 的子集:
date time X3
10/3/2018 6:15:00 7
10/3/2018 6:45:00 5
10/3/2018 7:45:00 7
10/3/2018 9:00:00 7
10/3/2018 9:25:00 7
10/3/2018 9:30:00 5
10/3/2018 11:00:00 7
10/3/2018 11:30:00 7
10/3/2018 13:30:00 7
10/3/2018 13:50:00 5
10/3/2018 15:00:00 7
10/3/2018 15:25:00 7
10/3/2018 16:25:00 7
10/3/2018 18:00:00 7
10/3/2018 19:00:00 5
我的 csv : 在此处输入链接描述
供参考:
expected time
0.0
30.0
60
90.0
120
165.0
180
190.0
195.0
240
285.0
300
315.0
360
420
435
455
480
525
540
550
:
:
:
:
0 new date ,start time=0
2
47
60
120
152
180
解决方案
利用:
data['date']= pd.to_datetime(data['date'] + " " + data['time'],
format='%d/%m/%Y %H:%M:%S', dayfirst=True)
减去日期列的 firat 值并转换为分钟:
data['time1'] = data['date'].sub(data.loc[0, 'date']).dt.total_seconds()/60
print (data)
date time X3 time1
0 2018-03-10 06:15:00 6:15:00 7 0.0
1 2018-03-10 06:45:00 6:45:00 5 30.0
2 2018-03-10 07:45:00 7:45:00 7 90.0
3 2018-03-10 09:00:00 9:00:00 7 165.0
4 2018-03-10 09:25:00 9:25:00 7 190.0
5 2018-03-10 09:30:00 9:30:00 5 195.0
6 2018-03-10 11:00:00 11:00:00 7 285.0
7 2018-03-10 11:30:00 11:30:00 7 315.0
8 2018-03-10 13:30:00 13:30:00 7 435.0
9 2018-03-10 13:50:00 13:50:00 5 455.0
10 2018-03-10 15:00:00 15:00:00 7 525.0
11 2018-03-10 15:25:00 15:25:00 7 550.0
12 2018-03-10 16:25:00 16:25:00 7 610.0
13 2018-03-10 18:00:00 18:00:00 7 705.0
14 2018-03-10 19:00:00 19:00:00 5 765.0
创建新的60
范围值:
arr = np.arange(0, int(data['time1'].max()), 60)
print (arr)
[ 0 60 120 180 240 300 360 420 480 540 600 660 720]
与分钟列一起加入:
union = np.union1d(data['time1'], arr)
print (union)
[ 0. 30. 60. 90. 120. 165. 180. 190. 195. 240. 285. 300. 315. 360.
420. 435. 455. 480. 525. 540. 550. 600. 610. 660. 705. 720. 765.]
time1
按列创建索引并DataFrame.reindex
从以下位置添加新值arr
:
data = data.set_index('time1')['X3'].reindex(union, fill_value=0).reset_index()
print (data)
time1 X3
0 0.0 7
1 30.0 5
2 60.0 0
3 90.0 7
4 120.0 0
5 165.0 7
6 180.0 0
7 190.0 7
8 195.0 5
9 240.0 0
10 285.0 7
11 300.0 0
12 315.0 7
13 360.0 0
14 420.0 0
15 435.0 7
16 455.0 5
17 480.0 0
18 525.0 7
19 540.0 0
20 550.0 7
21 600.0 0
22 610.0 7
23 660.0 0
24 705.0 7
25 720.0 0
26 765.0 5
推荐阅读
- java - 在Java中为char分配负值
- python - 为什么我的 nslookup 并不总是返回 IP?
- javascript - VSCode设置将数组内的JavaScript对象推送到新行
- reactjs - get access to child objects in react-native
- python - Searching a tuple element in a list of lists without changing the data structure
- sql-server - 如何通过 group by 得出每个 poly 的总支出?
- c - 如何使用 qsort 对结构的数组进行排序?
- docker - 错误解组内容:无效字符 '<' 寻找值的开头
- javascript - 来自字符串值的 Javascript 参数
- powerbi - 基于另一列值的条件计算