我有一个数据帧df,有两列。我想对一列进行分组,并通过获取“平均列表”(所有列表元素均经过平均)来汇总属于同一组的列表,如下所示:
column_a, column_b
1, [1,2,3]
1, [2,5,1]
2, [5,6,6]
3, [2,0,1]
3, [4,2,3]
列表始终具有相同的固定长度。所需的输出应如下所示:
group, avg_list
1, [1.5,3.5,2]
2, [5,6,6]
3, [3,1,2]
我知道我可以在数据帧上使用groupby并随后对其进行聚合,但是我不确定要在代码的agg部分中添加什么。
df.groupby('column_a').agg(?)
任何建议,我将不胜感激。
答案 0 :(得分:3)
您可以通过以下方式获得每个组中列表的平均值:
s = df.groupby("column_a")["column_b"].apply(lambda x: np.array(x.tolist()).mean(axis=0))
pd.DataFrame({'group':s.index, 'avg_list':s.values})
礼物:
group avg_list
0 1 [1.5, 3.5, 2.0]
1 2 [5.0, 6.0, 6.0]
2 3 [3.0, 1.0, 2.0]
答案 1 :(得分:0)
将它们分组为列表,然后使用均值来找到平均值。
df.set_index('column_a')['column_b'].groupby('column_a').apply(list).apply(lambda x: np.mean(x,0))
结果
column_a
1 [1.5, 3.5, 2.0]
2 [5.0, 6.0, 6.0]
3 [3.0, 1.0, 2.0]