python - 使用python来分隔列

标签 python pandas loops rows

我有一个公交车时刻表,其中包含工作日、每个站点以及公交车到达/离开该站点的相应时间。我希望将每个完整的旅程分成新线路上的多个单独的旅程。我的数据如下所示:

Day       Route    Leave Garage    Stop 1     Stop 2     Stop 3     Stop 4    Stop 5  
 
Monday     01          07:15        07:25      07:31      07:35      07:50     08:15
Monday     01          08:00        08:10      08:16      08:25      08:45     09:12
Tuesday    01          07:15        07:25      07:31      07:35      07:50     08:15
Tuesday    01          08:00        08:10      08:16      08:25      08:45     09:12
Wednesday  01          07:15        07:25      07:31      07:35      07:50     08:15
Wednesday  01          08:00        08:10      08:16      08:25      08:45     09:12

我的预期输出是:

Day       Route    Origin        Time     Destination    Time     
 
Monday     01      Leave Garage  07:15    Stop 1         07:25      
Monday     01      Stop 1        07:25    Stop 2         07:31 
Monday     01      Stop 2        07:31    Stop 3         07:35 
Monday     01      Stop 3        07:35    Stop 4         07:50     
Monday     01      Stop 4        07:50    Stop 5         08:15
Monday     01      Leave Garage  08:00    Stop 1         08:10      
Monday     01      Stop 1        08:10    Stop 2         08:16 
Monday     01      Stop 2        08:16    Stop 3         08:25 
Monday     01      Stop 3        08:25    Stop 4         08:45     
Monday     01      Stop 4        08:45    Stop 5         09:12
Tuesday    01      Leave Garage  07:15    Stop 1         07:25      
Tuesday    01      Stop 1        07:25    Stop 2         07:31 
Tuesday    01      Stop 2        07:31    Stop 3         07:35 
Tuesday    01      Stop 3        07:35    Stop 4         07:50     
Tuesday    01      Stop 4        07:50    Stop 5         08:15
Tuesday    01      Leave Garage  08:00    Stop 1         08:10      
Tuesday    01      Stop 1        08:10    Stop 2         08:16 
Tuesday    01      Stop 2        08:16    Stop 3         08:25 
Tuesday    01      Stop 3        08:25    Stop 4         08:45     
Tuesday    01      Stop 4        08:45    Stop 5         09:12
...

是否有一个循环可以在 pandas 中实现此目的?

非常感谢! - 阿里

最佳答案

让我们尝试基于 numpy 的方法:

s = df.set_index(['Day', 'Route'])
s1, s2 = s.iloc[:, :-1], s.iloc[:, 1:]

df1 = pd.DataFrame({
    'Origin': np.tile([*s1], len(s)), 'Time_Orig': np.hstack(s1.values),
    'Destination': np.tile([*s2], len(s)),  'Time_Dest': np.hstack(s2.values)},
     index=s.index.repeat(s.shape[1] - 1)).reset_index()

          Day  Route        Origin Time_Orig Destination Time_Dest
0      Monday      1  Leave Garage     07:15      Stop 1     07:25
1      Monday      1        Stop 1     07:25      Stop 2     07:31
2      Monday      1        Stop 2     07:31      Stop 3     07:35
3      Monday      1        Stop 3     07:35      Stop 4     07:50
4      Monday      1        Stop 4     07:50      Stop 5     08:15
5      Monday      1  Leave Garage     08:00      Stop 1     08:10
6      Monday      1        Stop 1     08:10      Stop 2     08:16
7      Monday      1        Stop 2     08:16      Stop 3     08:25
8      Monday      1        Stop 3     08:25      Stop 4     08:45
9      Monday      1        Stop 4     08:45      Stop 5     09:12
10    Tuesday      1  Leave Garage     07:15      Stop 1     07:25
11    Tuesday      1        Stop 1     07:25      Stop 2     07:31
12    Tuesday      1        Stop 2     07:31      Stop 3     07:35
13    Tuesday      1        Stop 3     07:35      Stop 4     07:50
14    Tuesday      1        Stop 4     07:50      Stop 5     08:15
15    Tuesday      1  Leave Garage     08:00      Stop 1     08:10
16    Tuesday      1        Stop 1     08:10      Stop 2     08:16
17    Tuesday      1        Stop 2     08:16      Stop 3     08:25
18    Tuesday      1        Stop 3     08:25      Stop 4     08:45
19    Tuesday      1        Stop 4     08:45      Stop 5     09:12
20  Wednesday      1  Leave Garage     07:15      Stop 1     07:25
21  Wednesday      1        Stop 1     07:25      Stop 2     07:31
22  Wednesday      1        Stop 2     07:31      Stop 3     07:35
23  Wednesday      1        Stop 3     07:35      Stop 4     07:50
24  Wednesday      1        Stop 4     07:50      Stop 5     08:15
25  Wednesday      1  Leave Garage     08:00      Stop 1     08:10
26  Wednesday      1        Stop 1     08:10      Stop 2     08:16
27  Wednesday      1        Stop 2     08:16      Stop 3     08:25
28  Wednesday      1        Stop 3     08:25      Stop 4     08:45
29  Wednesday      1        Stop 4     08:45      Stop 5     09:12

关于python - 使用python来分隔列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63882190/

相关文章:

python 猜字母游戏

swift - 反向 For 循环;应该很容易

python - 将字典导入python脚本?

python - 更新字典中现有值的更多pythonic方式

Python:使用可调用对象而不是本地函数作为装饰器中的包装器

python - Pandas 数据帧系列 : check if specific value exists

python - 使用多个分隔符将文本导入 Pandas

python - 基于与 DataFrame 列数匹配的 Series 对 pandas DataFrame 行应用操作

c# - 除了某些索引处的元素外,如何在列表上使用 foreach 循环?

python - 如何解码文件名