我有两个数据框,我想在这些数据框中将较小的df映射到较大的df。较大的df是5000行,我想根据较小的表中的条件加入。例如,较大的数据框是:
status type slot br
2 1 2 5
2 1 1 5
2 1 2 5
2 1 2 5
2 1 56 26
2 1 76 5
第二个数据帧如下:
slot name from to br
1 4PM 16 19 5
2 7PM 19 22 5
3 10PM 10 12 5
76 1PM 13 16 5
56 Lun 12 14 26
所以基本上我想将第二个数据帧中的列映射到第一个数据列中的“ slot”和“ br”这两个列,以便最终结果将如下所示在两者之间建立连接:
status type slot br name from to
2 1 2 5 7PM 19 22
2 1 1 5 4PM 16 19
2 1 2 5 7PM 19 22
2 1 2 5 7PM 19 22
2 1 56 26 Lun 12 14
2 1 76 5 1PM 13 16
我尝试使用if语句,但给了我一个错误。尽管我认为需要使用联接的更有效解决方案,或者if也应该很好
答案 0 :(得分:0)
这是一个简单的合并,在这种情况下,how
参数指定了合并的工作方式。
new_df = pd.merge(df,df2,on=['slot','br'],how='left')
print(new_df)
status type slot br name from to
0 2 1 2 5 7PM 19 22
1 2 1 1 5 4PM 16 19
2 2 1 2 5 7PM 19 22
3 2 1 2 5 7PM 19 22
4 2 1 56 26 Lun 12 14
5 2 1 76 5 1PM 13 16
我会提醒您先了解合并的工作方式,然后再进行进一步的操作,请查看LiquidCore
答案 1 :(得分:0)
这应该有效:
df = pd.DataFrame({'status': [2, 2, 2, 2, 2, 2],
'type': [1, 1, 1, 1, 1, 1],
'slot': [2, 1, 2, 2, 56, 76],
'br': [5.0, 5.0, 5.0, 5.0, 26.0, np.nan]})
df2 = pd.DataFrame({'slot': [1, 2, 3, 76, 56],
'name': ['4PM', '7PM', '10PM', '1PM', 'Lun'],
'from': [16, 19, 10, 13, 12],
'to': [19, 22, 12, 16, 14],
'br': [5, 5, 5, 5, 26]})
print(df.merge(df2,on=['slot','br'],how='left'))
status type slot br name from to
0 2 1 2 5.0 7PM 19.0 22.0
1 2 1 1 5.0 4PM 16.0 19.0
2 2 1 2 5.0 7PM 19.0 22.0
3 2 1 2 5.0 7PM 19.0 22.0
4 2 1 56 26.0 Lun 12.0 14.0
5 2 1 76 NaN NaN NaN NaN