Перечислять предметы в каждой группеPython

Программы на Python
Anonymous
 Перечислять предметы в каждой группе

Сообщение Anonymous »

У меня есть данные, например, < /p>

Код: Выделить всё

    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
< /code>

ord
по сути дает заказ записей, когда (, chi и id ) все имеют одинаковое значение. Это не совсем то, что я хотел бы, хотя. Вместо этого я хотел бы иметь возможность перечислять записи каждой группы G в {(id, chi)} от 0 до n_g, где n_g - это размер группы g. Так что я хотел бы получить что -то, что выглядит как < /p>

Код: Выделить всё

    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
< /code>

I'd like to know if there's a simple way of doing this with pandas
. Следующее идет очень близко, но оно кажется слишком сложным, и это по какой -то причине не позволит мне присоединиться к полученным данным с оригинальной. < /p>

Код: Выделить всё

(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']))
< /code>

EDIT: A second way of course is the for< /code> Loop Way, но я ищу что -то более "Pythonic", чем: < /p>

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

R has a very simple way of achieving this behaviour using the tidyverse
пакеты, но я не совсем нашел хорошо смазанный способ достичь того же самого с Pandas . Любая помощь очень ценится!

Подробнее здесь: https://stackoverflow.com/questions/522 ... each-group

Вернуться в «Python»