为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

婷婷同学_ 2019-06-18 13:19:01
如何使用Pandas groupby在组中添加顺序计数器列我觉得有比这更好的方法: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'])def callback(x):    x['seq'] = range(1, x.shape[0] + 1)    return xdf = df.groupby(['c1', 'c2']).apply(callback)print 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有什么方法可以避免回调吗?
查看完整描述

2 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-06-18
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

完整的工作代码


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'])


df['seq'] = df.groupby(['c1', 'c2']).cumcount() + 1

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


查看完整回答
反对 回复 2019-06-18
  • 2 回答
  • 0 关注
  • 1439 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信