【问题标题】:Using pandas groupby on two column how to derived a new column在两列上使用pandas groupby如何派生新列
【发布时间】:2018-12-26 15:05:47
【问题描述】:

我的数据集有很多列,我想根据该数据集上的两列创建一个新列。

   train_data[['CtpJobId', 'SegmentId']]

     CtpJobId     SegmentId
0   qa1-9epx-dk1    347772
1   qa1-9epx-dv1    347774
2   qa1-9epx-dv1    347777
3   qa1-9epx-dv1    347780
4   qa1-9epx-dv1    347783
5   qa1-9epx-dv1    347786
6   qa1-9epx-dv1    347789
7   qa1-9epx-dv1    347792
8   qa1-9epx-e01    347794
9   qa1-9epx-eb2    347795
10  qa1-9epx-ez1    347796
11  qa1-9epx-f32    347797
12  qa1-9epx-fi1    347798

现在我想创建一个名为 numberOfSegment 的新列,例如,如果同一个 jobId 有多个 segmentId,则聚合该 segmentId 并将总和插入到该新列中。

      CtpJobId        SegmentId    numberOfSegment
0   qa1-9epx-dk1    347772             1
1   qa1-9epx-dv1    347774             7
2   qa1-9epx-dv1    347777             7
3   qa1-9epx-dv1    347780             7
4   qa1-9epx-dv1    347783             7
5   qa1-9epx-dv1    347786             7
6   qa1-9epx-dv1    347789             7
7   qa1-9epx-dv1    347792             7
8   qa1-9epx-e01    347794             1
9   qa1-9epx-eb2    347795             1
10  qa1-9epx-ez1    347796             1
11  qa1-9epx-f32    347797             1

我以一种方式做了,但它给出了错误

train_data['NumberOfSegment'] = train_data.groupby('CtpJobId')['SegmentId'].sum()

 train_data[['CtpJobId','NumberOfSegment']]

   CtpJobId    NumberOfSegment
0   qa1-9epx-dk1    NaN
1   qa1-9epx-dv1    NaN
2   qa1-9epx-dv1    NaN
3   qa1-9epx-dv1    NaN
4   qa1-9epx-dv1    NaN
5   qa1-9epx-dv1    NaN
6   qa1-9epx-dv1    NaN
7   qa1-9epx-dv1    NaN
8   qa1-9epx-e01    NaN
9   qa1-9epx-eb2    NaN
10  qa1-9epx-ez1    NaN

谁能帮帮我?提前致谢

【问题讨论】:

    标签: python pandas data-science


    【解决方案1】:

    您需要将transform'count' 一起使用。

    train_data['NumberOfSegment'] = train_data.groupby('CtpJobId')['SegmentId'].transform('count')
    

    输出:

            CtpJobId  SegmentId  NumberOfSegment
    0   qa1-9epx-dk1     347772                1
    1   qa1-9epx-dv1     347774                7
    2   qa1-9epx-dv1     347777                7
    3   qa1-9epx-dv1     347780                7
    4   qa1-9epx-dv1     347783                7
    5   qa1-9epx-dv1     347786                7
    6   qa1-9epx-dv1     347789                7
    7   qa1-9epx-dv1     347792                7
    8   qa1-9epx-e01     347794                1
    9   qa1-9epx-eb2     347795                1
    10  qa1-9epx-ez1     347796                1
    11  qa1-9epx-f32     347797                1
    12  qa1-9epx-fi1     347798                1
    

    【讨论】:

      【解决方案2】:

      您需要groupbytransform

      df.groupby('CtpJobId').SegmentId.transform('count')
      
      0     1
      1     7
      2     7
      3     7
      4     7
      5     7
      6     7
      7     7
      8     1
      9     1
      10    1
      11    1
      12    1
      Name: SegmentId, dtype: int64 
      

      【讨论】:

        【解决方案3】:

        您也可以将map value_counts 结果发送到“CtpJobId”:

        df['NumberOfSegment'] = df.CtpJobId.map(df.CtpJobId.value_counts())    
        df
        
                CtpJobId  SegmentId  NumberOfSegment
        0   qa1-9epx-dk1     347772                1
        1   qa1-9epx-dv1     347774                7
        2   qa1-9epx-dv1     347777                7
        3   qa1-9epx-dv1     347780                7
        4   qa1-9epx-dv1     347783                7
        5   qa1-9epx-dv1     347786                7
        6   qa1-9epx-dv1     347789                7
        7   qa1-9epx-dv1     347792                7
        8   qa1-9epx-e01     347794                1
        9   qa1-9epx-eb2     347795                1
        10  qa1-9epx-ez1     347796                1
        11  qa1-9epx-f32     347797                1
        12  qa1-9epx-fi1     347798                1
        

        【讨论】:

        • 这是+1列出的最佳答案
        • @MHossain 我明白了,不用担心
        猜你喜欢
        • 2019-08-17
        • 2023-01-17
        • 1970-01-01
        • 2018-04-23
        • 1970-01-01
        • 1970-01-01
        • 2017-06-22
        • 1970-01-01
        • 2018-09-01
        相关资源
        最近更新 更多