我有一个数据框我想在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方式?
答案 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