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

如何利用唯一Business ID合并列表转换后的DataFrame中的两行?

按唯一Business ID合并DataFrame行的实用方法

嘿,这个需求在数据清洗里太常见了!咱们根据不同的场景,有几种靠谱的解决办法,你可以按需选择:

1. 合并互补的非空字段(保留所有有效数据)

如果同一Business ID下的两行,不同字段分别有非空值(比如一行有名称、一行有地址),咱们可以用groupby配合自定义聚合函数,把每个字段的非空值保留下来:

import pandas as pd

# 模拟你的数据结构
df = pd.DataFrame({
    'Business ID': [1001, 1001, 1002],
    'Company Name': ['Tech Corp', None, 'Retail Ltd'],
    'Contact Email': [None, 'info@techcorp.com', 'support@retail.com'],
    'Annual Sales': [200000, 200000, 150000]
})

# 按Business ID分组,聚合时保留每个字段的第一个非空值
merged_df = df.groupby('Business ID').agg(
    lambda x: x.dropna().iloc[0] if not x.dropna().empty else None
).reset_index()

print(merged_df)

这样处理后,同一个Business ID的行就会合并成一行,所有非空的有效数据都能保留。

2. 聚合数值型字段(求和/均值等)

如果你的DataFrame里有需要计算的数值列(比如销售额、订单数),可以给不同字段指定专属的聚合规则:

# 自定义每个字段的聚合方式
aggregation_rules = {
    'Company Name': 'first',  # 取第一个非空的公司名
    'Contact Email': 'last',   # 取最后一个非空的邮箱
    'Annual Sales': 'sum'      # 对销售额求和(如果同一ID下有不同数值的话)
}

merged_df = df.groupby('Business ID').agg(aggregation_rules).reset_index()

这种方法灵活度很高,你可以根据业务需求调整每个字段的聚合逻辑。

3. 直接去除重复行

如果同一Business ID下的两行数据完全重复,那最简单的方法就是直接去重:

# 保留每个Business ID的第一行,删除后续重复行
merged_df = df.drop_duplicates(subset='Business ID', keep='first')

# 如果你想保留最后一行,把keep改成'last'即可
# merged_df = df.drop_duplicates(subset='Business ID', keep='last')

以上几种方法基本能覆盖大部分场景啦,你可以根据自己的数据实际情况来选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:07:48