You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

方案优势

  1. 性能更优:pandas的merge是底层优化的向量操作,相比你原方案中逐组调用isin的方式,处理百万级数据时速度提升明显,避免了循环查询的性能瓶颈。
  2. 逻辑简洁:通过合并直接建立FOOs与BARs的关联,去重后得到唯一组合,逻辑清晰易懂,维护成本低。
  3. 输出可控:两种输出方式可根据需求选择,既支持pandas原生的表格展示,也能生成自定义格式的纯文本输出。

内容的提问来源于stack exchange,提问作者usualMortal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:05:29