【问题标题】:Obtain mode from column in groupby [duplicate]从groupby中的列获取模式[重复]
【发布时间】:2018-07-16 15:41:53
【问题描述】:

我正在尝试获取 groupby 对象中列的模式,但出现此错误:incompatible index of inserted column with frame index

这是我遇到的问题,我不知道如何修复它。任何帮助将不胜感激。

dfBitSeq['KMeans'] = df.groupby('OnBitSeq')['KMeans'].apply(lambda x: x.mode())

【问题讨论】:

  • Pandas 模式返回一个数据框,这与返回标量的均值和中位数不同。所以你只需要使用 x.mode().iloc[0] 选择切片
  • 这正是我所需要的。您可以将此作为答案提交,我会将其标记为已接受吗?

标签: python pandas


【解决方案1】:

您可以查看Attach a calculated column to an existing dataframe

这个错误看起来很相似,答案非常有用。

【讨论】:

    【解决方案2】:

    你可以使用scipy.stats.mode.下面的例子。

    from scipy.stats import mode
    
    df = pd.DataFrame([[1, 5], [2, 3], [3, 5], [2, 4], [2, 3], [1, 4], [1, 5]],
                      columns=['OnBitSeq', 'KMeans'])
    
    #    OnBitSeq  KMeans
    # 0         1       5
    # 1         2       3
    # 2         3       5
    # 3         2       4
    # 4         2       3
    # 5         1       4
    # 6         1       5
    
    modes = df.groupby('OnBitSeq')['KMeans'].apply(lambda x: mode(x)[0][0]).reset_index()
    
    #    OnBitSeq  KMeans
    # 0         1       5
    # 1         2       3
    # 2         3       5
    

    如果您需要将此添加回原始数据框:

    df['Mode'] = df['OnBitSeq'].map(modes.set_index('OnBitSeq')['KMeans'])
    

    【讨论】:

      【解决方案3】:

      Pandas 模式返回的数据帧与返回标量的均值和中位数不同。所以你只需要使用 x.mode().iloc[0]

      选择切片
      dfBitSeq['KMeans'] = df.groupby('OnBitSeq')['KMeans'].apply(lambda x: x.mode().iloc[0])
      

      【讨论】:

      • 它对我有用。
      猜你喜欢
      • 2021-08-07
      • 2018-03-04
      • 2018-02-25
      • 2017-12-02
      • 1970-01-01
      • 2018-09-06
      • 2019-07-06
      • 1970-01-01
      • 2010-11-17
      相关资源
      最近更新 更多