如何利用唯一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
相关产品推荐
相关产品推荐

