我有两个列的dataframe,一个是组,另一个是向量嵌入。数据已经是这样了,所以我不想争论嵌入列。嵌入列都共享相同的维度数。
基本上,我想计算每个组的平均嵌入量。平均而言,我的意思是轴心水平平均。因此,1,2和4,8的平均值为2.5,5。
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/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预期产出:
pd.DataFrame({"group":["a","b"],"embedding":[[0.5,0.5],[0.5,0.5]]})快速解决方案非常感谢,因为我的数据是相当庞大的。
发布于 2021-07-02 01:58:00
尝试使用apply np.mean
df.groupby('group')['embedding'].apply(np.mean).reset_index()
group embedding
0 a [0.5, 0.5]
1 b [0.5, 0.5]发布于 2021-07-02 01:43:36
如果保证embedding列中的元素为相同形状的numpy数组,则可以使用groupby + apply并使用Series.mean方法计算元素平均值:
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]发布于 2021-07-02 01:39:20
备选方案:
df = df.groupby("group")["embedding"].apply(lambda x: np.mean(
np.hstack(x).reshape(-1, 2), axis = 0)).reset_index()完整的例子:
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()https://stackoverflow.com/questions/68218610
复制相似问题