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

如何使用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

有什么方法可以避免回调吗?


婷婷同学_
浏览 1440回答 2
2回答

MYYA

使用cumcount(),见文档这里In [4]: df.groupby(['c1', 'c2']).cumcount()Out[4]: 0     01     12     03     14     05     16     27     08     09     010    111    2dtype: int64如果您希望订单从1开始In [5]: df.groupby(['c1', 'c2']).cumcount()+1Out[5]: 0     11     22     13     24     15     26     37     18     19     110    211    3dtype: int64

慕田峪7331174

完整的工作代码import pandas as pddf = 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'])df['seq'] = df.groupby(['c1', 'c2']).cumcount() + 1print(df)输出量   c1 c2  v1  seq0   A  X   3    11   A  X   5    22   A  Y   7    13   A  Y   1    24   B  X   3    15   B  X   1    26   B  X   3    37   B  Y   1    18   C  X   7    19   C  Y   4    110  C  Y   1    211  C  Y   6    3
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python