从groupby中的列获取模式

时间:2018-02-06 14:29:57

标签: python pandas

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

这是我正在接受的这一行,我不知道如何修复它。任何帮助将不胜感激。

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

此错误看起来类似,答案非常有用。

答案 2 :(得分:0)

您可以使用下面的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'])