Python Pandas-新的列分组和模式

时间:2018-07-15 09:18:26

标签: python pandas pandas-groupby

我有下一个数据框

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

有什么办法解决这个问题吗?

谢谢大家!

1 个答案:

答案 0 :(得分:1)

您可以将groupbypd.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