Pandas:如何基于多列合并行并合并列表列
合并Pandas DataFrame中列值相同的行并合并列表列
问题场景
现有如下Pandas DataFrame:
import pandas as pd test = [ {1: 434, 2: 343, 3: [592]}, {1: 434, 2: 343, 3: [192]}, {1: 534, 2: 743, 3: [392]}, ] df = pd.DataFrame(test)
输出结果:
1 2 3 0 434 343 [592] 1 434 343 [192] 2 534 743 [392]
需求:合并列1和列2值相同的行,并将列3中的列表合并,期望结果:
1 2 3 0 434 343 [592, 192] 1 534 743 [392]
用户已尝试使用df.groupby([1, 2]).aggregate(aggregation_functions),但不确定聚合函数的选择。
解决方案
可以通过两种方式实现需求:
方法1:自定义聚合函数
定义一个扁平化拼接列表的函数,配合groupby完成聚合:
def merge_lists(list_collection): return [item for sublist in list_collection for item in sublist] # as_index=False用于保留分组列(1、2)为普通数据列,而非索引 result_df = df.groupby([1, 2], as_index=False).agg({3: merge_lists})
方法2:利用列表的sum特性
列表的sum()方法会自动拼接所有子列表,适合当前列3均为列表的场景:
result_df = df.groupby([1, 2], as_index=False).agg({3: sum})
两种方法执行后,都能得到符合预期的结果。
内容的提问来源于stack exchange,提问作者SantoshGupta7
相关产品推荐
相关产品推荐

