熊猫分组并汇总多个列表

时间:2020-07-15 20:26:14

标签: pandas list aggregate pandas-groupby average

我有一个数据帧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(?)

任何建议,我将不胜感激。

2 个答案:

答案 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]