如何根据条件合并两个 Pandas 不同大小的 DataFrame
How to merge two Pandas DataFrames of different size based on condition
我有一个要合并到的主 df。我们称它为 'primary_df'.
RCID TypeID Data
777 D Hello
777 O Hey
778 O Hey
779 D Hello
primary_df 包含一个 'RCID' 列,该列与另一个数据帧中的 'O_ID' 匹配,该数据帧仅包含 TypeID 'O' 的数据。我们称之为 df 'o_type_df'
O_ID O_Data
777 Foo
778 Bar
o_type_df 的条目少于 primary_df。 primary_df 中有 'RCID' 的重复值,因为同一个 RCID 可以有不同的 TypeID 与之关联。
如何将 TypeID 'O' 的所有行的 o_type_df 合并到 primary_df 中?
最终结果应该是:
RCID TypeID Data O_ID O_Data
777 D Hello
777 O Hey 777 Foo
778 O Hey 778 Bar
779 D Hello
代码:
primary_df = pd.DataFrame(columns=['RCID', 'TypeID', 'Data'], data=[[777, 'D', 'Hello'], [777, 'O', 'Hey'], [778, 'O', 'Hey'], [779, 'D', 'Hello']])
o_type_df = pd.DataFrame(columns=['O_ID', 'O_Data'], data=[[777, 'Foo'], [778, 'Bar']])
尝试将指标列添加到 o_type_df
:
o_type_df['TypeID'] = 'O'
然后 merge
留在那些列上:
merged = (
primary_df.merge(o_type_df,
left_on=['RCID', 'TypeID'],
right_on=['O_ID', 'TypeID'],
how='left')
)
merged
:
RCID TypeID Data O_ID O_Data
0 777 D Hello NaN NaN
1 777 O Hey 777.0 Foo
2 778 O Hey 778.0 Bar
3 779 D Hello NaN NaN
或 assign
:
merged = (
primary_df.merge(o_type_df.assign(TypeID='O'),
left_on=['RCID', 'TypeID'],
right_on=['O_ID', 'TypeID'],
how='left')
)
merged
:
RCID TypeID Data O_ID O_Data
0 777 D Hello NaN NaN
1 777 O Hey 777.0 Foo
2 778 O Hey 778.0 Bar
3 779 D Hello NaN NaN
我有一个要合并到的主 df。我们称它为 'primary_df'.
RCID TypeID Data
777 D Hello
777 O Hey
778 O Hey
779 D Hello
primary_df 包含一个 'RCID' 列,该列与另一个数据帧中的 'O_ID' 匹配,该数据帧仅包含 TypeID 'O' 的数据。我们称之为 df 'o_type_df'
O_ID O_Data
777 Foo
778 Bar
o_type_df 的条目少于 primary_df。 primary_df 中有 'RCID' 的重复值,因为同一个 RCID 可以有不同的 TypeID 与之关联。
如何将 TypeID 'O' 的所有行的 o_type_df 合并到 primary_df 中?
最终结果应该是:
RCID TypeID Data O_ID O_Data
777 D Hello
777 O Hey 777 Foo
778 O Hey 778 Bar
779 D Hello
代码:
primary_df = pd.DataFrame(columns=['RCID', 'TypeID', 'Data'], data=[[777, 'D', 'Hello'], [777, 'O', 'Hey'], [778, 'O', 'Hey'], [779, 'D', 'Hello']])
o_type_df = pd.DataFrame(columns=['O_ID', 'O_Data'], data=[[777, 'Foo'], [778, 'Bar']])
尝试将指标列添加到 o_type_df
:
o_type_df['TypeID'] = 'O'
然后 merge
留在那些列上:
merged = (
primary_df.merge(o_type_df,
left_on=['RCID', 'TypeID'],
right_on=['O_ID', 'TypeID'],
how='left')
)
merged
:
RCID TypeID Data O_ID O_Data
0 777 D Hello NaN NaN
1 777 O Hey 777.0 Foo
2 778 O Hey 778.0 Bar
3 779 D Hello NaN NaN
或 assign
:
merged = (
primary_df.merge(o_type_df.assign(TypeID='O'),
left_on=['RCID', 'TypeID'],
right_on=['O_ID', 'TypeID'],
how='left')
)
merged
:
RCID TypeID Data O_ID O_Data
0 777 D Hello NaN NaN
1 777 O Hey 777.0 Foo
2 778 O Hey 778.0 Bar
3 779 D Hello NaN NaN