【问题标题】:Counting occurrence of values after using groupby on multiple pandas columns在多个熊猫列上使用 groupby 后计算值的出现
【发布时间】:2021-10-24 22:25:38
【问题描述】:

我的输入数据框如下:

使用以下代码行生成

 l = [["a", 12, 12], ["a", 12, 33.], ["b", 12.3, 12.3], ["a", 13, 1]]
df = pd.DataFrame(l, columns=["a", "b", "c"])

我目前可以累计频率如下

使用

df['freq'] = df.groupby(by=["a","b"]).cumcount()+1

它考虑了a列和b列中的常见值并计算它们。但是,我只想在 b 列值不同而 a 列值相同时才添加频率计数。下图显示了所需输出的一种形式:

如何在 pandas 中以优化的方式实现这一点?

【问题讨论】:

    标签: python pandas dataframe pandas-groupby frequency


    【解决方案1】:

    您可以使用双精度.groupby。例如:

    df["freq"] = df.groupby("a")["b"].apply(lambda x: x.groupby(x).ngroup() + 1)
    print(df)
    

    打印:

       a     b     c  freq
    0  a  12.0  12.0     1
    1  a  12.0  33.0     1
    2  b  12.3  12.3     1
    3  a  13.0   1.0     2
    

    【讨论】:

      【解决方案2】:

      IIUC,试试吧:

      df['freq'] = df.groupby('a')['b'].transform(lambda x: x.factorize()[0] + 1)
      

      输出:

         a     b     c  freq
      0  a  12.0  12.0     1
      1  a  12.0  33.0     1
      2  b  12.3  12.3     1
      3  a  13.0   1.0     2
      

      pd.Series.factorize 将为每个唯一的 'b' 值创建一个 int,以零表示。

      【讨论】:

      • 谢谢。一直在通过 stackoverflow 上很棒的社区学习,我从来没有想过用这种方式解决它。
      • @CC_ 不客气。快乐编码。保持安全并保持健康。
      猜你喜欢
      • 2018-05-15
      • 1970-01-01
      • 2018-07-17
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多