在熊猫数据框中更改负时间增量

问题描述 投票:0回答:1

我想创建一个矩阵,该矩阵具有从一个站点到另一个站点的时间。我已经完成了此矩阵,但是在数据帧的每一列和每一行中都有一些负的时间增量。看起来像这样(是它的一部分):


+=========================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+=============================+===========================+
|     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                      |
+-------------------------+-------------------------+------------------------------+

所以主要问题是如何将所有负时间增量更改为分钟,而其他时间增量仅更改为无天的分钟。我尝试了很多,但没有获得任何结果。

谢谢!

python pandas numpy dataframe timedelta
1个回答
0
投票

您可以将全部转换为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()
     )
© www.soinside.com 2019 - 2024. All rights reserved.