从groupby中的列获取模式[重复]

Posted

技术标签:

【中文标题】从groupby中的列获取模式[重复]【英文标题】:Obtain mode from column in groupby [duplicate] 【发布时间】: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] 选择切片 这正是我所需要的。您可以将此作为答案提交,我会将其标记为已接受吗? 【参考方案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])

【讨论】:

它对我有用。

以上是关于从groupby中的列获取模式[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MySql中常用函数

pandas:获取数组中的所有groupby值[重复]

Dataframe GroupBy 在包含模式的列上聚合

MySQL - 使用不在列表中的列对 Group By 语句排序 [重复]

在Laravel中获取具有不同外国ID的列中的最大值

在 SQL 中使用 Group By 和 Aggregate - 获取错误“选择列表中的列无效,因为它不包含在聚合函数或 GROUP BY 中”