首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用熊猫群计算numpy阵列的集合

用熊猫群计算numpy阵列的集合
EN

Stack Overflow用户
提问于 2021-07-02 01:29:08
回答 4查看 526关注 0票数 1

我有两个列的dataframe,一个是组,另一个是向量嵌入。数据已经是这样了,所以我不想争论嵌入列。嵌入列都共享相同的维度数。

基本上,我想计算每个组的平均嵌入量。平均而言,我的意思是轴心水平平均。因此,1,2和4,8的平均值为2.5,5。

代码语言:javascript
运行
复制
import pandas as pd
import numpy as np

df = pd.DataFrame({"group":["a","a","b","b"],"embedding":[[0,1],[1,0],[0,0],[1,1]]})
df['embedding'] = df['embedding'].apply(np.array)

df.groupby("group").agg({"embedding":"mean"}) #This raise error
代码语言:javascript
运行
复制
/opt/conda/lib/python3.7/site-packages/pandas/core/groupby/groupby.py in mean(self, numeric_only)
   1497             "mean",
   1498             alt=lambda x, axis: Series(x).mean(numeric_only=numeric_only),
-> 1499             numeric_only=numeric_only,
   1500         )
   1501 

/opt/conda/lib/python3.7/site-packages/pandas/core/groupby/groupby.py in _cython_agg_general(self, how, alt, numeric_only, min_count)
   1079 
   1080         if not output:
-> 1081             raise DataError("No numeric types to aggregate")
   1082 
   1083         return self._wrap_aggregated_output(output, index=self.grouper.result_index)

DataError: No numeric types to aggregate

预期产出:

代码语言:javascript
运行
复制
pd.DataFrame({"group":["a","b"],"embedding":[[0.5,0.5],[0.5,0.5]]})

快速解决方案非常感谢,因为我的数据是相当庞大的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-07-02 01:58:00

尝试使用apply np.mean

代码语言:javascript
运行
复制
df.groupby('group')['embedding'].apply(np.mean).reset_index()
  group   embedding
0     a  [0.5, 0.5]
1     b  [0.5, 0.5]
票数 0
EN

Stack Overflow用户

发布于 2021-07-02 01:43:36

如果保证embedding列中的元素为相同形状的numpy数组,则可以使用groupby + apply并使用Series.mean方法计算元素平均值:

代码语言:javascript
运行
复制
df.groupby('group').embedding.apply(lambda g: g.mean()).reset_index()
#  group   embedding
#0     a  [0.5, 0.5]
#1     b  [0.5, 0.5]
票数 2
EN

Stack Overflow用户

发布于 2021-07-02 01:39:20

备选方案:

代码语言:javascript
运行
复制
df = df.groupby("group")["embedding"].apply(lambda x: np.mean(
    np.hstack(x).reshape(-1, 2), axis = 0)).reset_index()

完整的例子:

代码语言:javascript
运行
复制
import pandas as pd
import numpy as np

df = pd.DataFrame({"group": ["a", "a", "b", "b"], "embedding": [
                  [0, 1], [1, 0], [0, 0], [1, 1]]})

df = df.groupby("group")["embedding"].apply(lambda x: np.mean(
    np.hstack(x).reshape(-1, 2), axis = 0)).reset_index()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68218610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档