gpt4 book ai didi

python - Pandas :枚举每组中的项目

转载 作者:太空宇宙 更新时间:2023-11-04 09:39:15 26 4
gpt4 key购买 nike

我有一个像

这样的DataFrame
    id   chi  prop   ord 
0 100 L 67 0
1 100 L 68 1
2 100 L 68 2
3 100 L 68 3
4 100 L 70 0
5 100 L 71 0
6 100 R 67 0
7 100 R 68 1
8 100 R 68 2
9 100 R 68 3
10 110 R 70 0
11 110 R 71 0
12 101 L 67 0
13 101 L 68 0
14 101 L 69 0
15 101 L 71 0
16 101 L 72 0
17 201 R 67 0
18 201 R 68 0
19 201 R 69 0

ord 本质上给出了当 (propchiid) 都具有相同的值。但这不是我想要的。相反,我希望能够从 0 到 n_g 枚举 {(id, chi)} 中每个组 g 的条目,其中 n_g 是组 g 的大小。所以我想获得一些看起来像

    id   chi  prop   count 
0 100 L 67 0
1 100 L 68 1
2 100 L 68 2
3 100 L 68 3
4 100 L 70 4
5 100 L 71 5
6 100 R 67 0
7 100 R 68 1
8 100 R 68 2
9 100 R 68 3
10 110 R 70 0
11 110 R 71 1
12 101 L 67 0
13 101 L 68 1
14 101 L 69 2
15 101 L 71 3
16 101 L 72 4
17 201 R 67 0
18 201 R 68 1
19 201 R 69 2

我想知道是否有使用 pandas 执行此操作的简单方法。下面的内容非常接近,但感觉太复杂了,而且出于某种原因,它不允许我join 生成的数据帧与原始数据帧。

(df.groupby(['id', 'chi'])
.apply(lambda g: np.arange(g.shape[0]))
.apply(pd.Series, 1)
.stack()
.rename('counter')
.reset_index()
.drop(columns=['level_2']))

编辑:第二种方式当然是 for 循环方式,但我正在寻找比以下更“Pythonic”的东西:

for gname, idx in df.groupby(['id','chi']).groups.items():
tmp = df.loc[idx]
df.loc[idx, 'counter'] = np.arange(tmp.shape[0])

R 使用 tidyverse 包有一个非常简单的方法来实现这种行为,但我还没有找到用 pandas。非常感谢提供的任何帮助!

最佳答案

累计数

df.assign(ord=df.groupby(['id', 'chi']).cumcount())

id chi prop ord
0 100 L 67 0
1 100 L 68 1
2 100 L 68 2
3 100 L 68 3
4 100 L 70 4
5 100 L 71 5
6 100 R 67 0
7 100 R 68 1
8 100 R 68 2
9 100 R 68 3
10 110 R 70 0
11 110 R 71 1
12 101 L 67 0
13 101 L 68 1
14 101 L 69 2
15 101 L 71 3
16 101 L 72 4
17 201 R 67 0
18 201 R 68 1
19 201 R 69 2

defaultdictcount

from itertools import count
from collections import defaultdict

d = defaultdict(count)

df.assign(ord=[next(d[t]) for t in zip(df.id, df.chi)])

id chi prop ord
0 100 L 67 0
1 100 L 68 1
2 100 L 68 2
3 100 L 68 3
4 100 L 70 4
5 100 L 71 5
6 100 R 67 0
7 100 R 68 1
8 100 R 68 2
9 100 R 68 3
10 110 R 70 0
11 110 R 71 1
12 101 L 67 0
13 101 L 68 1
14 101 L 69 2
15 101 L 71 3
16 101 L 72 4
17 201 R 67 0
18 201 R 68 1
19 201 R 69 2

关于python - Pandas :枚举每组中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52263102/

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