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号母线。我找到了解决办法。谢谢伟大的那么你想出了什么解决方案呢?我在最初的帖子中添加了这个解决方案