gpt4 book ai didi

python - Pandas - 按列分组并将数据转换为 numpy 数组

转载 作者:太空狗 更新时间:2023-10-29 21:41:23 25 4
gpt4 key购买 nike

具有以下数据框,A 组有 4 个样本,B 有 3 个样本,C 有 1 个样本:

  group   data_1   data_2
0 A 1 4
1 A 2 5
2 A 3 6
3 A 4 7
4 B 1 4
5 B 2 5
6 B 3 6
7 C 1 4

我想将数据转换为 numpy 数组,其中每一行都是一个包含其所有样本的组,并为样本较少的组填充零。

生成如下数组:

[
[[1,4],[2,5],[3,6],[4,7]], # this is A group 4 samples
[[1,4],[2,5],[3,6],[0,0]], # this is B group 3 samples
[[1,4],[0,0],[0,0],[0,0]], # this is C group 1 sample
]

最佳答案

首先需要添加缺失值 - 第一个解决方案 unstackstack ,计数器系列由 cumcount 创建.

第二种解决方案使用reindex通过 MultiIndex

最后使用 lambda 函数与 groupby,通过 values 转换为 numpy 数组最后列出:

g = df.groupby('group').cumcount()
L = (df.set_index(['group',g])
.unstack(fill_value=0)
.stack().groupby(level=0)
.apply(lambda x: x.values.tolist())
.tolist())
print (L)

[[[1, 4], [2, 5], [3, 6], [4, 7]],
[[1, 4], [2, 5], [3, 6], [0, 0]],
[[1, 4], [0, 0], [0, 0], [0, 0]]]

另一种解决方案:

g = df.groupby('group').cumcount()
mux = pd.MultiIndex.from_product([df['group'].unique(), g.unique()])
L = (df.set_index(['group',g])
.reindex(mux, fill_value=0)
.groupby(level=0)['data_1','data_2']
.apply(lambda x: x.values.tolist())
.tolist()
)

关于python - Pandas - 按列分组并将数据转换为 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52621497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com