我正在尝试获取groupby对象中列的模式,但我收到此错误:incompatible index of inserted column with frame index
。
这是我正在接受的这一行,我不知道如何修复它。任何帮助将不胜感激。
dfBitSeq['KMeans'] = df.groupby('OnBitSeq')['KMeans'].apply(lambda x: x.mode())
答案 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'])