Pandas 在新列中为每个组重复值

Pandas 在新列中为每个组重复值,pandas,group-by,Pandas,Group By,我的输入如下所示,我想创建一个新的列quarter,该列应该为每组“name”重复,如预期输出所示 number name date1 date 2 1750 AAR CORP 12/18/2015 5/31/2012 1750 AAR CORP 3/23/2016 5/31/2012 1750 AAR CORP 9/23/2016 5/31/2012 1750 AAR CORP 12/22/2016 5/3

我的输入如下所示,我想创建一个新的列quarter,该列应该为每组“name”重复,如预期输出所示

number  name        date1       date 2
1750    AAR CORP    12/18/2015  5/31/2012
1750    AAR CORP    3/23/2016   5/31/2012
1750    AAR CORP    9/23/2016   5/31/2012
1750    AAR CORP    12/22/2016  5/31/2012
1800    ABBOTT LAB  5/8/2012    12/31/2011
1800    ABBOTT LAB  8/7/2012    12/31/2011
1800    ABBOTT LAB  11/7/2012   12/31/2011
1800    ABBOTT LAB  5/8/2013    12/31/2011
1800    ABBOTT LAB  8/6/2013    12/31/2011
预期产出:

number  name        date1       date 2      quarter
1750    AAR CORP    12/18/2015  5/31/2012   QTR 1
1750    AAR CORP    3/23/2016   5/31/2012   QTR 2
1750    AAR CORP    9/23/2016   5/31/2012   QTR 3
1750    AAR CORP    12/22/2016  5/31/2012   QTR 1
1800    ABBOTT LAB  5/8/2012    12/31/2011  QTR 1
1800    ABBOTT LAB  8/7/2012    12/31/2011  QTR 2
1800    ABBOTT LAB  11/7/2012   12/31/2011  QTR 3
1800    ABBOTT LAB  5/8/2013    12/31/2011  QTR 1
1800    ABBOTT LAB  8/6/2013    12/31/2011  QTR 2
四分之一值将以3为一组重复,直到该名称有行为止


我被《熊猫》中简单的群比节目困住了,不知道如何继续每一组

您可以对组使用
cumcount
,然后对于重复
1,2,3,…
序列,获取
3
添加
1

In [125]: 'QTR ' + ((df.groupby('name').cumcount() % 3) + 1).astype(str)
Out[125]:
0    QTR 1
1    QTR 2
2    QTR 3
3    QTR 1
4    QTR 1
5    QTR 2
6    QTR 3
7    QTR 1
8    QTR 2
dtype: object
或者

细节

In [131]: df['quarter'] = 'QTR ' + ((df.groupby('name').cumcount() % 3) + 1).astype(str)

In [132]: df
Out[132]:
   number        name       date1       date2 quarter
0    1750    AAR CORP  12/18/2015   5/31/2012   QTR 1
1    1750    AAR CORP   3/23/2016   5/31/2012   QTR 2
2    1750    AAR CORP   9/23/2016   5/31/2012   QTR 3
3    1750    AAR CORP  12/22/2016   5/31/2012   QTR 1
4    1800  ABBOTT LAB    5/8/2012  12/31/2011   QTR 1
5    1800  ABBOTT LAB    8/7/2012  12/31/2011   QTR 2
6    1800  ABBOTT LAB   11/7/2012  12/31/2011   QTR 3
7    1800  ABBOTT LAB    5/8/2013  12/31/2011   QTR 1
8    1800  ABBOTT LAB    8/6/2013  12/31/2011   QTR 2

您可以对组使用
cumcount
,然后对于重复
1,2,3,…
序列,获取
3
添加
1

In [125]: 'QTR ' + ((df.groupby('name').cumcount() % 3) + 1).astype(str)
Out[125]:
0    QTR 1
1    QTR 2
2    QTR 3
3    QTR 1
4    QTR 1
5    QTR 2
6    QTR 3
7    QTR 1
8    QTR 2
dtype: object
或者

细节

In [131]: df['quarter'] = 'QTR ' + ((df.groupby('name').cumcount() % 3) + 1).astype(str)

In [132]: df
Out[132]:
   number        name       date1       date2 quarter
0    1750    AAR CORP  12/18/2015   5/31/2012   QTR 1
1    1750    AAR CORP   3/23/2016   5/31/2012   QTR 2
2    1750    AAR CORP   9/23/2016   5/31/2012   QTR 3
3    1750    AAR CORP  12/22/2016   5/31/2012   QTR 1
4    1800  ABBOTT LAB    5/8/2012  12/31/2011   QTR 1
5    1800  ABBOTT LAB    8/7/2012  12/31/2011   QTR 2
6    1800  ABBOTT LAB   11/7/2012  12/31/2011   QTR 3
7    1800  ABBOTT LAB    5/8/2013  12/31/2011   QTR 1
8    1800  ABBOTT LAB    8/6/2013  12/31/2011   QTR 2

你到底是怎么做的?如果你能做到这一点,你肯定已经非常接近解决方案了。你到底是如何做你的Groupy的?如果你能做到这一点,你一定已经非常接近解决方案了。