我有下一个数据帧
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
有什么办法解决这个问题吗?
谢谢大家!
发布于 2018-07-16 07:13:18
您可以在pd.Series.mode
中使用groupby
。困难在于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
https://stackoverflow.com/questions/51346991
复制相似问题