gpt4 book ai didi

python - Numpy 和 Pandas 按 Bin 重复值

转载 作者:太空宇宙 更新时间:2023-11-03 14:41:13 24 4
gpt4 key购买 nike

我有一个 Dataframe 或 Numpy 数组,其中组号递增,我想分配一个值列表(长度与唯一组数相等),每个组重复。

ID - Group
0 - 0
1 - 0
2 - 1
3 - 1
4 - 1
5 - 2
6 - 2
7 - 3

要分配的值:

[4, 2, 7, 8] # 4 maps to group 0, 2 maps to group 1 etc

输出:

ID - Group  - Val
0 - 0 - 4
1 - 0 - 4
2 - 1 - 2
3 - 1 - 2
4 - 1 - 2
5 - 2 - 7
6 - 2 - 7
7 - 3 - 8

感谢任何建议,如果有优雅的方法/ native 函数来解决这个问题(寻找 Numpy 和 Pandas 解决方案),最好不要循环。

最佳答案

设置:

a = np.array([4, 2, 7, 8])
v = df.Group.values
dct = {}

选项 1
使用 numpy 索引。 (此解决方案假定您的组范围为 0-N:

dct['numpy_indexing'] = a[v]

选项 2
使用 np.repeat。 (此解决方案假设您的组不是交错的):

dct['numpy_repeat'] = np.repeat(a, np.bincount(v))

选项 3
使用 map 。这种方法会比其他方法慢,但更灵活一些,因为它允许交错组和非线性组:

d = dict(zip(np.unique(v), a))

dct['pandas_map'] = df.Group.map(d)

输出

df.assign(**dct)

ID Group numpy_indexing numpy_repeat pandas_map
0 0 0 4 4 4
1 1 0 4 4 4
2 2 1 2 2 2
3 3 1 2 2 2
4 4 1 2 2 2
5 5 2 7 7 7
6 6 2 7 7 7
7 7 3 8 8 8

关于python - Numpy 和 Pandas 按 Bin 重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53087518/

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