我想创建一个具有从一个站点到另一个站点的时间的矩阵。我已经完成了此矩阵,但是在数据帧的每一列和每一行中都有一些负的时间增量。看起来像这样(是它的一部分):
+=========================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+===========================+
| Arrival Station | San Francisco | 22nd Street | Bayshore | South San Francisco | San Bruno | Millbrae Transit Center | Broadway | Burlingame | San Mateo | Hayward Park | Hillsdale | Belmont | San Carlos | Redwood City | Atherton | Menlo Park | Palo Alto | Stanford | California Ave. | San Antonio | Mountain View | Sunnyvale | Lawrence | Santa Clara | College Park | San Jose Diridon | Tamien | Capitol | Blossom Hill | Morgan Hill | San Martin | Gilroy |
+=========================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+===========================+
| San Francisco | 0 days 00:00:00.000000000 | 0 days 00:05:00.000000000 | 0 days 00:10:00.000000000 | 0 days 00:17:00.000000000 | 0 days 00:21:00.000000000 | 0 days 00:25:00.000000000 | 0 days 00:29:00.000000000 | 0 days 00:32:00.000000000 | 0 days 00:35:00.000000000 | 0 days 00:39:00.000000000 | 0 days 00:42:00.000000000 | 0 days 00:46:00.000000000 | 0 days 00:49:00.000000000 | 0 days 00:54:00.000000000 | 0 days 00:59:00.000000000 | 0 days 01:02:00.000000000 | 0 days 01:06:00.000000000 | 0 days 01:08:00.000000000 | 0 days 01:09:00.000000000 | 0 days 01:13:00.000000000 | 0 days 01:18:00.000000000 | 0 days 01:23:00.000000000 | 0 days 01:27:00.000000000 | 0 days 01:32:00.000000000 | 0 days 01:35:00.000000000 | 0 days 01:44:00.000000000 | 0 days 01:50:00.000000000 | 0 days 01:57:00.000000000 | 0 days 02:03:00.000000000 | 0 days 02:16:00.000000000 | 0 days 02:22:00.000000000 | 0 days 02:38:00.000000000 |
+-------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+---------------------------+
| 22nd Street | -1 days +23:55:00.000000000 | 0 days 00:00:00.000000000 | 0 days 00:05:00.000000000 | 0 days 00:12:00.000000000 | 0 days 00:16:00.000000000 | 0 days 00:20:00.000000000 | 0 days 00:24:00.000000000 | 0 days 00:27:00.000000000 | 0 days 00:30:00.000000000 | 0 days 00:34:00.000000000 | 0 days 00:37:00.000000000 | 0 days 00:41:00.000000000 | 0 days 00:44:00.000000000 | 0 days 00:49:00.000000000 | 0 days 00:54:00.000000000 | 0 days 00:57:00.000000000 | 0 days 01:01:00.000000000 | 0 days 01:03:00.000000000 | 0 days 01:04:00.000000000 | 0 days 01:08:00.000000000 | 0 days 01:13:00.000000000 | 0 days 01:18:00.000000000 | 0 days 01:22:00.000000000 | 0 days 01:27:00.000000000 | 0 days 01:30:00.000000000 | 0 days 01:39:00.000000000 | 0 days 01:45:00.000000000 | 0 days 01:52:00.000000000 | 0 days 01:58:00.000000000 | 0 days 02:11:00.000000000 | 0 days 02:17:00.000000000 | 0 days 02:33:00.000000000 |
+-------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+---------------------------+
| Bayshore | -1 days +23:50:00.000000000 | -1 days +23:55:00.000000000 | 0 days 00:00:00.000000000 | 0 days 00:07:00.000000000 | 0 days 00:11:00.000000000 | 0 days 00:15:00.000000000 | 0 days 00:19:00.000000000 | 0 days 00:22:00.000000000 | 0 days 00:25:00.000000000 | 0 days 00:29:00.000000000 | 0 days 00:32:00.000000000 | 0 days 00:36:00.000000000 | 0 days 00:39:00.000000000 | 0 days 00:44:00.000000000 | 0 days 00:49:00.000000000 | 0 days 00:52:00.000000000 | 0 days 00:56:00.000000000 | 0 days 00:58:00.000000000 | 0 days 00:59:00.000000000 | 0 days 01:03:00.000000000 | 0 days 01:08:00.000000000 | 0 days 01:13:00.000000000 | 0 days 01:17:00.000000000 | 0 days 01:22:00.000000000 | 0 days 01:25:00.000000000 | 0 days 01:34:00.000000000 | 0 days 01:40:00.000000000 | 0 days 01:47:00.000000000 | 0 days 01:53:00.000000000 | 0 days 02:06:00.000000000 | 0 days 02:12:00.000000000 | 0 days 02:28:00.000000000 |
+-------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+---------------------------+
| South San Francisco | -1 days +23:43:00.000000000 | -1 days +23:48:00.000000000 | -1 days +23:53:00.000000000 | 0 days 00:00:00.000000000 | 0 days 00:04:00.000000000 | 0 days 00:08:00.000000000 | 0 days 00:12:00.000000000 | 0 days 00:15:00.000000000 | 0 days 00:18:00.000000000 | 0 days 00:22:00.000000000 | 0 days 00:25:00.000000000 | 0 days 00:29:00.000000000 | 0 days 00:32:00.000000000 | 0 days 00:37:00.000000000 | 0 days 00:42:00.000000000 | 0 days 00:45:00.000000000 | 0 days 00:49:00.000000000 | 0 days 00:51:00.000000000 | 0 days 00:52:00.000000000 | 0 days 00:56:00.000000000 | 0 days 01:01:00.000000000 | 0 days 01:06:00.000000000 | 0 days 01:10:00.000000000 | 0 days 01:15:00.000000000 | 0 days 01:18:00.000000000 | 0 days 01:27:00.000000000 | 0 days 01:33:00.000000000 | 0 days 01:40:00.000000000 | 0 days 01:46:00.000000000 | 0 days 01:59:00.000000000 | 0 days 02:05:00.000000000 | 0 days 02:21:00.000000000 |
+-------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+---------------------------+
| San Bruno | -1 days +23:39:00.000000000 | -1 days +23:44:00.000000000 | -1 days +23:49:00.000000000 | -1 days +23:56:00.000000000 | 0 days 00:00:00.000000000 | 0 days 00:04:00.000000000 | 0 days 00:08:00.000000000 | 0 days 00:11:00.000000000 | 0 days 00:14:00.000000000 | 0 days 00:18:00.000000000 | 0 days 00:21:00.000000000 | 0 days 00:25:00.000000000 | 0 days 00:28:00.000000000 | 0 days 00:33:00.000000000 | 0 days 00:38:00.000000000 | 0 days 00:41:00.000000000 | 0 days 00:45:00.000000000 | 0 days 00:47:00.000000000 | 0 days 00:48:00.000000000 | 0 days 00:52:00.000000000 | 0 days 00:57:00.000000000 | 0 days 01:02:00.000000000 | 0 days 01:06:00.000000000 | 0 days 01:11:00.000000000 | 0 days 01:14:00.000000000 | 0 days 01:23:00.000000000 | 0 days 01:29:00.000000000 | 0 days 01:36:00.000000000 | 0 days 01:42:00.000000000 | 0 days 01:55:00.000000000 | 0 days 02:01:00.000000000 | 0 days 02:17:00.000000000 |
+-------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+---------------------------+
| Millbrae Transit Center | -1 days +23:35:00.000000000 | -1 days +23:40:00.000000000 | -1 days +23:45:00.000000000 | -1 days +23:52:00.000000000 | -1 days +23:56:00.000000000 | 0 days 00:00:00.000000000 | 0 days 00:04:00.000000000 | 0 days 00:07:00.000000000 | 0 days 00:10:00.000000000 | 0 days 00:14:00.000000000 | 0 days 00:17:00.000000000 | 0 days 00:21:00.000000000 | 0 days 00:24:00.000000000 | 0 days 00:29:00.000000000 | 0 days 00:34:00.000000000 | 0 days 00:37:00.000000000 | 0 days 00:41:00.000000000 | 0 days 00:43:00.000000000 | 0 days 00:44:00.000000000 | 0 days 00:48:00.000000000 | 0 days 00:53:00.000000000 | 0 days 00:58:00.000000000 | 0 days 01:02:00.000000000 | 0 days 01:07:00.000000000 | 0 days 01:10:00.000000000 | 0 days 01:19:00.000000000 | 0 days 01:25:00.000000000 | 0 days 01:32:00.000000000 | 0 days 01:38:00.000000000 | 0 days 01:51:00.000000000 | 0 days 01:57:00.000000000 | 0 days 02:13:00.000000000 |
+-------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+---------------------------+
| Broadway | -1 days +23:31:00.000000000 | -1 days +23:36:00.000000000 | -1 days +23:41:00.000000000 | -1 days +23:48:00.000000000 | -1 days +23:52:00.000000000 | -1 days +23:56:00.000000000 | 0 days 00:00:00.000000000 | 0 days 00:03:00.000000000 | 0 days 00:06:00.000000000 | 0 days 00:10:00.000000000 | 0 days 00:13:00.000000000 | 0 days 00:17:00.000000000 | 0 days 00:20:00.000000000 | 0 days 00:25:00.000000000 | 0 days 00:30:00.000000000 | 0 days 00:33:00.000000000 | 0 days 00:37:00.000000000 | 0 days 00:39:00.000000000 | 0 days 00:40:00.000000000 | 0 days 00:44:00.000000000 | 0 days 00:49:00.000000000 | 0 days 00:54:00.000000000 | 0 days 00:58:00.000000000 | 0 days 01:03:00.000000000 | 0 days 01:06:00.000000000 | 0 days 01:15:00.000000000 | 0 days 01:21:00.000000000 | 0 days 01:28:00.000000000 | 0 days 01:34:00.000000000 | 0 days 01:47:00.000000000 | 0 days 01:53:00.000000000 | 0 days 02:09:00.000000000 |
+-------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+---------------------------+
| Burlingame | -1 days +23:28:00.000000000 | -1 days +23:33:00.000000000 | -1 days +23:38:00.000000000 | -1 days +23:45:00.000000000 | -1 days +23:49:00.000000000 | -1 days +23:53:00.000000000 | -1 days +23:57:00.000000000 | 0 days 00:00:00.000000000 | 0 days 00:03:00.000000000 | 0 days 00:07:00.000000000 | 0 days 00:10:00.000000000 | 0 days 00:14:00.000000000 | 0 days 00:17:00.000000000 | 0 days 00:22:00.000000000 | 0 days 00:27:00.000000000 | 0 days 00:30:00.000000000 | 0 days 00:34:00.000000000 | 0 days 00:36:00.000000000 | 0 days 00:37:00.000000000 | 0 days 00:41:00.000000000 | 0 days 00:46:00.000000000 | 0 days 00:51:00.000000000 | 0 days 00:55:00.000000000 | 0 days 01:00:00.000000000 | 0 days 01:03:00.000000000 | 0 days 01:12:00.000000000 | 0 days 01:18:00.000000000 | 0 days 01:25:00.000000000 | 0 days 01:31:00.000000000 | 0 days 01:44:00.000000000 | 0 days 01:50:00.000000000 | 0 days 02:06:00.000000000 |
+-------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+---------------------------+
我使用以下代码创建此表:
from datetime import datetime,timedelta
import numpy as np
def format_timedelta(td):
print(td)
if td < timedelta(0):
return '-' + format_timedelta(-td)
else:
# Change this to format positive timedeltas the way you want
return str(td)
def transform_dataframe1():
with open('/Users/miss_evgenia/Downloads/Caltrain Metrics - Sheet6.csv', "r") as input_data:
station_times = pd.read_csv(input_data)
for i in range(len(station_times)-1):
station_times['Time between stations in min'][i] = datetime.strptime(station_times['Time between stations in min'][i],"%H:%M:%S")
station_times['Time between stations in min'][i] = timedelta(minutes=station_times['Time between stations in min'][i].minute)
# to stop gilroy appearing twice
station_times.drop(station_times.tail(1).index,inplace=True)
cumulative_distances = station_times['Time between stations in min'].cumsum()
distance_matrix = cumulative_distances.values - cumulative_distances.values[:, None]
distance_matrix = pd.DataFrame(distance_matrix, index=station_times["Arrival Station"], columns=station_times["Arrival Station"])
return distance_matrix
我使用的现有数据:
+=========================+=========================+==============================+
| Departure Station | Arrival Station | Time between stations in min |
+=========================+=========================+==============================+
| | San Francisco | 0:00:00 |
+-------------------------+-------------------------+------------------------------+
| San Francisco | 22nd Street | 0:05:00 |
+-------------------------+-------------------------+------------------------------+
| 22nd Street | Bayshore | 0:05:00 |
+-------------------------+-------------------------+------------------------------+
| Bayshore | South San Francisco | 0:07:00 |
+-------------------------+-------------------------+------------------------------+
| South San Francisco | San Bruno | 0:04:00 |
+-------------------------+-------------------------+------------------------------+
| San Bruno | Millbrae Transit Center | 0:04:00 |
+-------------------------+-------------------------+------------------------------+
| Millbrae Transit Center | Broadway | 0:04:00 |
+-------------------------+-------------------------+------------------------------+
| Broadway | Burlingame | 0:03:00 |
+-------------------------+-------------------------+------------------------------+
| Burlingame | San Mateo | 0:03:00 |
+-------------------------+-------------------------+------------------------------+
| San Mateo | Hayward Park | 0:04:00 |
+-------------------------+-------------------------+------------------------------+
| Hayward Park | Hillsdale | 0:03:00 |
+-------------------------+-------------------------+------------------------------+
| Hillsdale | Belmont | 0:04:00 |
+-------------------------+-------------------------+------------------------------+
| Belmont | San Carlos | 0:03:00 |
+-------------------------+-------------------------+------------------------------+
| San Carlos | Redwood City | 0:05:00 |
+-------------------------+-------------------------+------------------------------+
| Redwood City | Atherton | 0:05:00 |
+-------------------------+-------------------------+------------------------------+
| Atherton | Menlo Park | 0:03:00 |
+-------------------------+-------------------------+------------------------------+
| Menlo Park | Palo Alto | 0:04:00 |
+-------------------------+-------------------------+------------------------------+
| Palo Alto | Stanford | 0:02:00 |
+-------------------------+-------------------------+------------------------------+
| Stanford | California Ave. | 0:01:00 |
+-------------------------+-------------------------+------------------------------+
| California Ave. | San Antonio | 0:04:00 |
+-------------------------+-------------------------+------------------------------+
| San Antonio | Mountain View | 0:05:00 |
+-------------------------+-------------------------+------------------------------+
| Mountain View | Sunnyvale | 0:05:00 |
+-------------------------+-------------------------+------------------------------+
| Sunnyvale | Lawrence | 0:04:00 |
+-------------------------+-------------------------+------------------------------+
| Lawrence | Santa Clara | 0:05:00 |
+-------------------------+-------------------------+------------------------------+
| Santa Clara | College Park | 0:03:00 |
+-------------------------+-------------------------+------------------------------+
| College Park | San Jose Diridon | 0:09:00 |
+-------------------------+-------------------------+------------------------------+
| San Jose Diridon | Tamien | 0:06:00 |
+-------------------------+-------------------------+------------------------------+
| Tamien | Capitol | 0:07:00 |
+-------------------------+-------------------------+------------------------------+
| Capitol | Blossom Hill | 0:06:00 |
+-------------------------+-------------------------+------------------------------+
| Blossom Hill | Morgan Hill | 0:13:00 |
+-------------------------+-------------------------+------------------------------+
| Morgan Hill | San Martin | 0:06:00 |
+-------------------------+-------------------------+------------------------------+
| San Martin | Gilroy | 0:16:00 |
+-------------------------+-------------------------+------------------------------+
| Gilroy | Gilroy | 0:00:00 |
+-------------------------+-------------------------+------------------------------+
因此,主要问题是如何将所有负时间增量更改为分钟,而其他时间增量仅更改为无天的分钟。我做了很多尝试,但没有获得任何结果。
谢谢!
答案 0 :(得分:1)
您可以将所有内容转换为timedelta
,然后转换为stack
并进行过滤:
df = df.set_index('Arrival Station').apply(pd.to_timedelta)
(df.stack().loc[lambda x: x > pd.to_timedelta('0s')]
.rename_axis(['Departure','Arrival'])
.reset_index(name='Time')
)
输出:
Departure Arrival Time
0 San Francisco 22nd Street 00:05:00
1 San Francisco Bayshore 00:10:00
2 San Francisco South San Francisco 00:17:00
3 San Francisco San Bruno 00:21:00
4 San Francisco Millbrae Transit Center 00:25:00
.. ... ... ...
215 Burlingame Capitol 01:25:00
216 Burlingame Blossom Hill 01:31:00
217 Burlingame Morgan Hill 01:44:00
218 Burlingame San Martin 01:50:00
219 Burlingame Gilroy 02:06:00
更新:如果只需要绝对时间,只需与abs()
链接:
df = (df.set_index('Arrival Station')
.apply(pd.to_timedelta)
.abs().reset_index()
)