如何在Pandas中基于单列对多列执行多种聚合与提取操作?
实现DataFrame分组聚合需求的解决方案
针对你给出的DataFrame,我们可以通过Pandas的groupby结合agg方法来实现按primaryName分组后的多列自定义聚合操作,具体代码如下:
import pandas as pd # 构造示例DataFrame data = { 'primaryName': ['Fred Astaire']*4, 'averageRating': [7.0, 6.9, 7.0, 7.1], 'primaryProfession': ['soundtrack,actor,miscellaneous']*4, 'knownForTitles': ['tt0072308', 'tt0031983', 'tt0050419', 'tt0053137'], 'runtimeMinutes': [165, 93, 103, 134] } df = pd.DataFrame(data, index=[1,2,3,4]) # 执行分组聚合操作 result_df = df.groupby('primaryName').agg( # 对averageRating列求和 averageRating=('averageRating', 'sum'), # 从primaryProfession提取actor/actress,取组内第一个匹配结果 primaryProfession=('primaryProfession', lambda x: x.str.extract(r'(actor|actress)').iloc[0, 0]), # 统计knownForTitles的条目数 knownForTitles=('knownForTitles', 'count'), # 对runtimeMinutes列求和 runtimeMinutes=('runtimeMinutes', 'sum') ).reset_index() # 调整索引为1,匹配示例输出格式 result_df.index = [1] print(result_df)
代码说明:
- 分组:使用
groupby('primaryName')将数据按姓名分组,确保同一人物的所有行被归为一组。 - 聚合操作:
averageRating和runtimeMinutes直接使用Pandas内置的sum函数完成求和。knownForTitles使用count函数统计组内条目数量。primaryProfession通过str.extract配合正则表达式(actor|actress)提取目标职业,由于组内该列值一致,取第一个匹配结果即可。
- 索引调整:最后通过
reset_index将分组键primaryName还原为普通列,并手动设置索引为1,和示例输出格式对齐。
运行上述代码后,将得到你需要的输出结果:
primaryName averageRating primaryProfession knownForTitles runtimeMinutes 1 Fred Astaire 28.0 actor 4 495
内容的提问来源于stack exchange,提问作者astroluv
相关产品推荐
相关产品推荐

