Python-如何使用Pandas groupby在组上添加顺序计数器列

我觉得有比这更好的方法:

import pandas as pd

df = pd.DataFrame(

[['A', 'X', 3], ['A', 'X', 5], ['A', 'Y', 7], ['A', 'Y', 1],

['B', 'X', 3], ['B', 'X', 1], ['B', 'X', 3], ['B', 'Y', 1],

['C', 'X', 7], ['C', 'Y', 4], ['C', 'Y', 1], ['C', 'Y', 6]],

columns=['c1', 'c2', 'v1'])

def callback(x):

x['seq'] = range(1, x.shape[0] + 1)

return x

df = df.groupby(['c1', 'c2']).apply(callback)

print df

为达到这个:

   c1 c2  v1  seq

0 A X 3 1

1 A X 5 2

2 A Y 7 1

3 A Y 1 2

4 B X 3 1

5 B X 1 2

6 B X 3 3

7 B Y 1 1

8 C X 7 1

9 C Y 4 1

10 C Y 1 2

11 C Y 6 3

有没有一种方法可以避免回调?

回答:

使用cumcount(),请参阅此处的文档

In [4]: df.groupby(['c1', 'c2']).cumcount()

Out[4]:

0 0

1 1

2 0

3 1

4 0

5 1

6 2

7 0

8 0

9 0

10 1

11 2

dtype: int64

如果要从1开始订购

In [5]: df.groupby(['c1', 'c2']).cumcount()+1

Out[5]:

0 1

1 2

2 1

3 2

4 1

5 2

6 3

7 1

8 1

9 1

10 2

11 3

dtype: int64

以上是 Python-如何使用Pandas groupby在组上添加顺序计数器列 的全部内容, 来源链接: utcz.com/qa/420056.html

回到顶部