gpt4 book ai didi

python - 应用自定义 groupby 聚合函数来查找 Numpy 数组的平均值

转载 作者:行者123 更新时间:2023-12-02 19:33:32 34 4
gpt4 key购买 nike

我有一个 pandas DataFrame其中 B 包含固定大小的 NumPy 列表。

|------|---------------|-------|
| A | B | C |
|------|---------------|-------|
| 0 | [2,3,5,6] | X |
|------|---------------|-------|
| 1 | [1,2,3,4] | X |
|------|---------------|-------|
| 2 | [2,3,6,5] | Y |
|------|---------------|-------|
| 3 | [2,3,2,3] | Y |
|------|---------------|-------|
| 4 | [2,3,4,4] | Y |
|------|---------------|-------|
| 5 | [2,3,5,6] | Z |
|------|---------------|-------|

我想按列“C”对它们进行分组,并计算“B”值的平均值作为列表。如下表所示。我想有效地做到这一点。

|----------------|-------|
| B | C |
|----------------|-------|
| [1.5,2.5,4,5] | X |
|----------------|-------|
| [2,3,4,4] | Y |
|----------------|-------|
| [2,3,5,6] | Z |
|----------------|-------|

我考虑过将 NumPy 列表分成单独的列。但这将是我最后的选择。

如何编写自定义聚合函数,因为现在 B 列显示非数字并显示

DataError: No numeric types to aggregate 

最佳答案

您可以将值转换为二维数组,然后使用np.mean:

f = lambda x: np.mean(np.array(x.tolist()), axis=0)
df2 = df.groupby('C')['B'].apply(f).reset_index()
print (df2)
C B
0 X [1.5, 2.5, 4.0, 5.0]
1 Y [2.0, 3.0, 4.0, 4.0]
2 Z [2.0, 3.0, 5.0, 6.0]

最后一个选项解决方案是可能的,但效率较低(感谢@Abhik Sarkar 进行测试):

df1 = pd.DataFrame(df.B.tolist()).groupby(df['C']).mean()
df2 = pd.DataFrame({'B': df1.values.tolist(), 'C': df1.index})
print (df2)
B C
0 [1.5, 2.5, 4.0, 5.0] X
1 [2.0, 3.0, 4.0, 4.0] Y
2 [2.0, 3.0, 5.0, 6.0] Z

关于python - 应用自定义 groupby 聚合函数来查找 Numpy 数组的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61422670/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com