从 Pandas 分组 DataFrame 返回 3D Numpy 数组

问题描述 投票:0回答:1

我正在尝试将分组的 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,)
pandas dataframe numpy numpy-ndarray
1个回答
0
投票

尝试一下,或者用它来获取灵感。

您的代码:

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)

我认为原始代码的问题在于“应用”函数/操作如何处理数据。告诉我它是否有效和/或是否有任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.