python - 如何根据条件合并两个不同大小的 Pandas DataFrame
问题描述
我有一个要合并的主 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
推荐阅读
- c++ - 从 g++ 输出中删除不必要的汇编语句
- d - D中的Scala groupBy等价物是什么?
- html - 如何居中对齐一组标签并了解发生了什么
- cypress - Cypress 作为前端的 UAT 工具
- javascript - 为什么不能使用 JVM 代替 WebAssembly?
- javascript - 如何仅在 jquery 数据表中删除子行?
- sql - 我可以使用什么数据类型来存储超过 15000 个字符的字符串?
- java - 在 Spark Executors 上向 Kafka 提交偏移量
- react-native - react-native-code-push 使用已弃用的“rnpm”如何删除警告
- r - RStudio:从 URL 下载 ZIP 文件并从 ZIP 文件读取 CSV 文件时出现问题