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

如何基于指定列聚合Pandas DataFrame重复行(字符串场景)

解决方案:合并同一用户的多行评分数据

问题分析

核心需求是将同一用户的多行数据合并为单行,每个电影列保留该用户唯一的有效评分。需注意:你的数据中空值是空字符串而非Pandas默认的NaN,这是之前方法失效的关键——ffill等填充逻辑仅对NaN生效。

可行方案

无需逐个指定列名,通过三步即可完成处理,完美适配你的大数据集:

  1. 将所有空字符串替换为pd.NA,让Pandas识别为空值
  2. 按name分组,对每列取第一个非空值(因同一用户同一电影仅存在一个有效评分)
  3. 重置索引,恢复name为普通列

代码实现

import pandas as pd

data = pd.DataFrame({
    'name': ['John', 'Jane', 'Joe', 'John', 'Jane', 'Joe'],
    'movie1': ['', 'bad', 'avg', 'nice', '', ''],
    'movie2': ['good', '', '', '', 'poor', ''],
    'movie3': ['bad', '', 'good', '', '', ''],
})

# 1. 替换空字符串为Pandas可识别的空值
data.replace('', pd.NA, inplace=True)

# 2. 分组后提取每列的唯一有效评分
result = data.groupby('name', as_index=False).first()

# 可选:将空值转回空字符串,匹配预期输出格式
result.fillna('', inplace=True)

print("处理结果:")
print(result)

输出结果

name movie1 movie2 movie3
0  Jane    bad   poor        
1   Joe    avg          good
2  John   nice   good    bad

之前方法失效的原因

  • ffill未生效:原数据是空字符串而非NaN,填充逻辑无法识别
  • groupby('name').ffill()报错:分组后name转为索引,drop_duplicates('name')找不到对应列,触发KeyError
  • apply(lambda x: x.fillna(method='ffill').iloc[0])无效:同样因空字符串未转NaN,填充逻辑未触发,仅保留了第一行原始值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:11:08