pandas - numpy.vstack 作为 pandas groupy 中的聚合器
问题描述
我有一个熊猫数据框:
d = {'group' : [1, 1, 2, 2], 'histogram' : [[1,2,3], [4,5,6], [7,8,9],[10,11,12]]}
df = pd.DataFrame(d)
数据框包含直方图分析的结果。目标是为每组创建 2D numpy 数组。IE
对于第 1 组,二维 numpy 数组将是np.array([[1,2,3],[4,5,6]])
. 形状将是 (3,2)
我尝试了以下方法:
df_test = pd.DataFrame(df.groupby("group").agg({'histogram':'count',
'histogram':lambda x: np.vstack(x)}))
但是我收到以下错误:
例外:必须产生聚合值
我当然可以遍历数据框,按组过滤并使用
np.vstack(df_filtered["histogram"])
但我想一定有一种对熊猫更友好的方式。最终我会将二维数组解析为 Keras 模型。
解决方案
关闭您需要的是将其转换为列表:
df_test = (pd.DataFrame(df.groupby("group")['histogram']
.agg([('c', 'count'),('2d',lambda x: np.vstack(x).tolist())])))
print (df_test)
c 2d
group
1 2 [[1, 2, 3], [4, 5, 6]]
2 2 [[7, 8, 9], [10, 11, 12]]
或使用GroupBy.apply
:
f = lambda x: pd.DataFrame([[len(x), np.vstack(x)]], columns=['c','2d'])
df_test = df.groupby("group")['histogram'].apply(f).reset_index(level=1, drop=True)
print (df_test)
c 2d
group
1 2 [[1, 2, 3], [4, 5, 6]]
2 2 [[7, 8, 9], [10, 11, 12]]
推荐阅读
- java - 我可以在从同步块返回对象之前调用 notifyAll 吗?
- python - 定期轮询 Raspberry Pi 上的端口或硬件 IO 点
- c# - 当路径包含“&”时,安装 VSTO Outlook 加载项失败
- javascript - 使用数组作为对象的替代方法是什么?
- intellij-idea - 运行 IntelliJ Run 配置后触发多个 URL
- javascript - 为什么 .push() 为我在数组中创建数组?
- reactjs - 如何将 ref 传递给类函数
- java - java中所有类型文件的加密解密AES
- python-3.x - 这是如何工作的 str.replace(r'\(.*\)', '')?
- vb.net - 将属性值绑定到 Label.Text VB.Net