如何在Pandas中实现两个DataFrame聚合并输出清晰格式
高效实现FOOs与BARs的多对多关联聚合
针对你处理百万级DataFrame的需求,推荐使用合并+去重+排序的方案,既简洁高效,又能生成清晰可读的输出:
核心实现代码
import pandas as pd # 合并两个DataFrame,通过IDs关联FOOs和BARs merged_df = pd.merge(df_foo[["FOOs", "IDs"]], df_bar[["BARs", "IDs"]], on="IDs") # 去除重复的FOOs-BARs组合(多对多关联会产生重复项) unique_pairs = merged_df[["FOOs", "BARs"]].drop_duplicates() # 按FOOs和BARs排序,保证输出顺序整齐 sorted_pairs = unique_pairs.sort_values(by=["FOOs", "BARs"])
输出为清晰的表格格式
如果想要紧凑的分组显示效果,只需将FOOs设为索引:
result = sorted_pairs.set_index("FOOs") print(result)
输出效果:
BARs FOOs foo1 bar1 foo1 bar2 foo1 bar3 foo2 bar1 foo2 bar2 foo3 bar1 foo3 bar3 foo4 bar1
完全匹配示例的文本输出
如果需要让重复的FOOs显示为空,可手动生成格式化文本:
prev_foo = None output = ["FOOs BARs"] for foo, bar in sorted_pairs.itertuples(index=False): if foo == prev_foo: output.append(f" {bar}") else: output.append(f"{foo:<8}{bar}") prev_foo = foo print("\n".join(output))
输出完全符合你的要求:
FOOs BARs foo1 bar1 bar2 bar3 foo2 bar1 bar2 foo3 bar1 bar3 foo4 bar1
方案优势
- 性能更优:pandas的
merge是底层优化的向量操作,相比你原方案中逐组调用isin的方式,处理百万级数据时速度提升明显,避免了循环查询的性能瓶颈。 - 逻辑简洁:通过合并直接建立FOOs与BARs的关联,去重后得到唯一组合,逻辑清晰易懂,维护成本低。
- 输出可控:两种输出方式可根据需求选择,既支持pandas原生的表格展示,也能生成自定义格式的纯文本输出。
内容的提问来源于stack exchange,提问作者usualMortal
相关产品推荐
相关产品推荐

