代码之家  ›  专栏  ›  技术社区  ›  sectechguy

按前2列分组的熊猫将下一列用作两个新字段,并使用单元格计数

  •  0
  • sectechguy  · 技术社区  · 6 年前

    我有一个3列的数据框架。我希望按日期分组,并将winid作为两列,并在单元格中计数。这是我的数据框架:

        date        userid  extid   count
    0   2019-01-16  1       4624    34
    1   2019-01-16  1       4625    2
    2   2019-01-16  2       4624    10
    3   2019-01-16  2       4625    0
    4   2019-01-17  1       4624    32
    5   2019-01-17  1       4625    0
    6   2019-01-17  2       4624    17
    7   2019-01-17  2       4625    1
    8   2019-01-18  1       4624    27
    9   2019-01-18  1       4625    1
    10  2019-01-18  2       4624    27
    11  2019-01-18  2       4625    3
    12  2019-01-21  1       4624    20
    13  2019-01-21  1       4625    0
    14  2019-01-21  2       4624    17
    15  2019-01-21  2       4625    2
    

    我想要的输出:

        date        userid 4624  4625
    0   2019-01-16  1      34    2
    1   2019-01-16  2      10    0
    2   2019-01-17  1      32    0
    3   2019-01-17  2      17    1
    4   2019-01-18  1      27    1      
    5   2019-01-18  2      27    3
    6   2019-01-21  1      20    0
    7   2019-01-21  2      17    2
    

    我尝试了转置和透视表,但未能完成这项工作。

    1 回复  |  直到 6 年前
        1
  •  1
  •   jpp    6 年前

    你可以 pivot_table 具有 aggfunc='first' . pivot 在概念上是正确的,除非它只支持单个标量 index 争论。

    res = pd.pivot_table(df, index=['date', 'userid'], columns='extid',
                         values='count', aggfunc='first').reset_index()
    
    print(res)
    
    extid        date  userid  4624  4625
    0      2019-01-16       1    34     2
    1      2019-01-16       2    10     0
    2      2019-01-17       1    32     0
    3      2019-01-17       2    17     1
    4      2019-01-18       1    27     1
    5      2019-01-18       2    27     3
    6      2019-01-21       1    20     0
    7      2019-01-21       2    17     2