如何在groupby agg之后删除`<lambda>`

时间:2018-03-02 12:42:13

标签: python pandas

我有一个数据框我想在groupby函数中执行mode操作。我使用以下代码段

来做到这一点
df=df.groupby(['col1','col2']).agg([lambda x:x.mode()[0]]).reset_index()

之后,df在我的数据框中包含 lambda 作为第一行。

输入:

  col1 col2 col3 col4
0   a1   b1   c1   d1
1   a1   b1   c1   d1
2   a1   b1   c2   d2
3   a1   b2   c2   d2
4   a1   b2   c2   d2
5   a1   b2   c3   d3

输出

  col1 col2     col3     col4
            <lambda> <lambda>
0   a1   b1       c1       d1
1   a1   b2       c2       d2

我有两个问题:

1.为什么我得到这个记录?

2.如何删除?我的意思是有没有pythonic方式?

2 个答案:

答案 0 :(得分:2)

[]移除agg以避免MultiIndex

df=df.groupby(['col1','col2']).agg(lambda x:x.mode()[0]).reset_index()
print (df)
  col1 col2 col3 col4
0   a1   b1   c1   d1
1   a1   b2   c2   d2

答案 1 :(得分:1)

一种方法是添加参数as_index=False

import pandas as pd

df = pd.DataFrame([['a1', 'b1', 'c'], ['a1', 'b1', 'd'], ['a1', 'b1', 'c']])

res = df.groupby([0, 1], as_index=False)[2].agg(lambda x: x.mode()[0])

#     0   1  2
# 0  a1  b1  c