Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据列值,合并一个数据帧而不从左侧删除任何列_Python_Pandas_Join_Merge_Insert - Fatal编程技术网

Python 根据列值,合并一个数据帧而不从左侧删除任何列

Python 根据列值,合并一个数据帧而不从左侧删除任何列,python,pandas,join,merge,insert,Python,Pandas,Join,Merge,Insert,我有以下两个数据帧: 第一个数据帧包含一个带有公共汽车编号、车站ID和车站名称的公共汽车时刻表 1。df_时间: bus_nr stop_id stop_name 0 1 1 a 1 1 2 b 2 1 3 c 3 1 4 d 4 2 1 k 5 2

我有以下两个数据帧:
第一个数据帧包含一个带有公共汽车编号、车站ID和车站名称的公共汽车时刻表

1。df_时间:

     bus_nr   stop_id   stop_name
0      1         1          a
1      1         2          b
2      1         3          c
3      1         4          d
4      2         1          k
5      2         2          l
6      2         3          m
7      2         4          n
8      2         5          o
     bus_nr   trip_id   stop_name   other
0      1         1          a         x
1      1         1          b         x
2      1         1          d         x
3      1         2          c         x
4      1         2          d         x
5      2         3          k         x
6      2         3          m         x
7      2         3          n         x
第二个数据帧包含总线位置的一些测量值,但缺少一些站点。该框架包含公交车编号、站点名称、行程id和其他信息:

2。df_测量值:

     bus_nr   stop_id   stop_name
0      1         1          a
1      1         2          b
2      1         3          c
3      1         4          d
4      2         1          k
5      2         2          l
6      2         3          m
7      2         4          n
8      2         5          o
     bus_nr   trip_id   stop_name   other
0      1         1          a         x
1      1         1          b         x
2      1         1          d         x
3      1         2          c         x
4      1         2          d         x
5      2         3          k         x
6      2         3          m         x
7      2         3          n         x
现在,我想将时间表中缺失的值与测量的停车点相加,以便所有时间表停车点都发生在测量中:

     bus_nr   trip_id   stop_id   stop_name   other
0      1         1         1          a         x
1      1         1         2          b         x
2      1         1         3          c         NaN
3      1         1         4          d         x
4      1         2         1          a         NaN
5      1         2         2          b         NaN
6      1         2         3          c         x
7      1         2         4          d         x
8      2         3         1          k         x
9      2         3         2          l         NaN
10     2         3         3          m         x
11     2         3         4          n         x
12     2         3         5          o         NaN
因此,对于每个总线,我希望使用df\u time中的所有信息,并将其插入df\u measure。有什么想法吗

用于创建数据帧的代码:

df_time = pd.DataFrame()
df_time['bus_nr'] = [1, 1, 1, 1, 2, 2, 2, 2, 2]
df_time['stop_id'] = [1, 2, 3, 4, 1, 2, 3, 4, 5]
df_time['stop_name'] = ['a', 'b', 'c', 'd', 'k', 'l', 'm', 'n', 'o']

df_measure = pd.DataFrame()
df_measure['bus_nr'] = [1, 1, 1, 1, 1, 2, 2, 2]
df_measure['trip_id'] = [1, 1, 1, 2, 2, 3, 3, 3]
df_measure['stop_name'] = ['a', 'b', 'd', 'c', 'd', 'k', 'm', 'n']
df_measure['other'] = ['x', 'x', 'x', 'x', 'x', 'x', 'x', 'x']
解决方案: 在Sagar Dawda的帮助下,我找到了一个有效的解决方案:
1.创建一个包含所有总线编号和跳闸编号组合的数据帧

df_combi = df_measure[['bus_nr', 'trip_id']].copy()
df_combi = df_combi.loc[df_combi.duplicated(['bus_nr', 'trip_id'], keep='first')==False]
二,。使用Sagar Dawda的溶液

out = pd.merge_ordered(df_time, df_measure, right_by='trip_id', how='outer')
out = out.loc[:, ['bus_nr', 'trip_id', 'stop_id', 'stop_name', 'other']]
三,。合并

out.merge(df_combi)

假设bus_nr和stop_名称唯一标识行,则可以在这些列上进行合并:

df_measure=pd.merge([df_time,df_measure],on=['bus_nr','stop_name'))


巴士线
行程id
站牌
停止你的名字
其他
0
1.
1.
1.
A.
x
1.
1.
1.
2.
B
x
2.
1.
1.
3.
C
楠
3.
1.
1.
4.
D
x
9
1.
2.
1.
A.
楠
10
1.
2.
2.
B
楠
11
1.
2.
3.
C
x
12
1.
2.
4.
D
x
18
1.
3.
1.
A.
楠
19
1.
3.
2.
B
楠
20
1.
3.
3.
C
楠
21
1.
3.
4.
D
楠
4.
2.
1.
1.
K
楠
5.
2.
1.
2.
L
楠
6.
2.
1.
3.
M
楠
7.
2.
1.
4.
N
楠
8.
2.
1.
5.
o
楠
13
2.
2.
1.
K
楠
14
2.
2.
2.
L
楠
15
2.
2.
3.
M
楠
16
2.
2.
4.
N
楠
17
2.
2.
5.
o
楠
22
2.
3.
1.
K
x
23
2.
3.
2.
L
楠
24
2.
3.
3.
M
x
25
2.
3.
4.
N
x
26
2.
3.
5.
o
楠

谢谢!现在的问题是,out数据帧还包含例如trip_id 3和bus_nr 1的组合。但跳闸id 3仅针对2号公共汽车进行测量。同样的问题也发生在跳闸id 1和跳闸id 2上,它们属于1号母线,而不是2号母线。我找到了解决办法。谢谢伟大的那么你想出了什么解决方案呢?我在最初的帖子中添加了这个解决方案