我有下一个数据框
A | B | C
---------
1 | 22 | 12
2 | 22 | 5
2 | 22 | 5
3 | 23 | 6
我想在此数据框中添加一个名为D的新列。 D的值应该是按A和B分组的C(模式)分组中最重复的值。
我尝试这个
def mode(x):
return mstats.mode(x, axis=None)[0]
df_total['D'] = df_total.groupby(['A','B']).agg({'C': mode})
但是我有下一个错误
TypeError: incompatible index of inserted column with frame index
有什么办法解决这个问题吗?
谢谢大家!
答案 0 :(得分:1)
您可以将groupby
与pd.Series.mode
一起使用。困难在于pd.Series.mode
返回的是序列而不是标量。它不被视为“减少”功能。因此,必须提取该系列的第一个值。
来自@gyoza的数据。
df['D'] = df.groupby(['A', 'B'])['C'].transform(lambda x: x.mode().iloc[0])
print(df)
A B C D
0 1 22 12 12
1 2 22 5 5
2 2 22 5 5
3 2 22 3 5
4 3 23 6 6