我正在尝试将分组的 Pandas DataFrame 转换为 3D numpy 数组,其中每个 DataFrame 单元都映射到 1D numpy 数组。我期待形状为 (4, 2, 3) 的 3D 数组,但我得到的是形状为 (3,) 1D 数组的形状 (4, 2) 2D 数组。
简化示例:
example_df = pd.DataFrame(
[["A", True, True],
["A", True, False],
["B", False, True],
["B", False, False]],
columns=["grp", "col1", "col2"],
)
def mapper(val):
return np.ones(3) if val is True else np.zeros(3)
result = (
example_df.groupby(["grp"])
.apply(lambda df: df.map(mapper), include_groups=False)
.to_numpy()
)
print(type(result))
print(type(result[0]))
print(type(result[0][0]))
print(type(result[0][0][0]))
print(result.shape)
print(result[0, 0].shape)
输出:
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.float64'>
(4, 2)
(3,)
尝试一下,或者用它来获取灵感。
您的代码:
result = (
example_df.groupby(["grp"])
.apply(lambda df: df.map(mapper), include_groups=False)
.to_numpy()
)
请尝试使用此代码。可能需要调整。
result = example_df[["col1", "col2"]].applymap(mapper).values
result = np.stack(result).reshape(4, 2, 3)
print(result.shape) # Should print (4, 2, 3)
print(result)
我认为原始代码的问题在于“应用”函数/操作如何处理数据。告诉我它是否有效和/或是否有任何问题。