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

Pandas:两列的累积计数

  •  0
  • Sam  · 技术社区  · 7 年前
    winner  loser   winner_matches  loser_matches
    Dave    Harry   1               1
    Jim     Dave    1               2
    Dave    Steve   3               1
    

    Dave 上面有一个运行计数 3 cumcount groupby 但我不确定是否只需要手动循环数据集并自己存储所有名称。

    2 回复  |  直到 7 年前
        1
  •  1
  •   jezrael    7 年前

    第一次创建 MultiIndex Series 通过 DataFrame.stack GroupBy.cumcount ,用于 DataFrame 添加 unstack 具有 add_suffix

    print (df)
      winner  loser
    0   Dave  Harry
    1    Jim   Dave
    2   Dave  Steve
    
    s = df.stack()
    #if multiple columns in original df
    #s = df[['winner','loser']].stack()
    df1 = s.groupby(s).cumcount().add(1).unstack().add_suffix('_matches')
    print (df1)
       winner_matches  loser_matches
    0               1              1
    1               1              2
    2               3              1
    

    最后附加到原始 数据帧 通过 join :

    df = df.join(df1)
    print (df)
      winner  loser  winner_matches  loser_matches
    0   Dave  Harry               1              1
    1    Jim   Dave               1              2
    2   Dave  Steve               3              1
    
        2
  •  0
  •   pyd    7 年前

    flatten ,

     pd.Series(df[['winner','loser']].values.flatten()).value_counts()
     [out]
     Dave     3
     Jim      1
     Harry    1
     Steve    1