从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 - 使用不在列表中的列对 Group By 语句排序 [重复]
在 SQL 中使用 Group By 和 Aggregate - 获取错误“选择列表中的列无效,因为它不包含在聚合函数或 GROUP BY 中”