基于this question。Groupby + Apply生成不需要的MultiIndex
df = pandas.DataFrame([[2001, "Jack", 77], [2005, "Jack", 44], [2001, "Jill", 93]],columns=['Year','Name','Value']) Year Name Value 0 2001 Jack 77 1 2005 Jack 44 2 2001 Jill 93
对于每一个独特的名字,我想保留该行拥有最大 年值。在上面的例子中,我想拿到桌子
Year Name Value 0 2005 Jack 44 1 2001 Jill 93
我试图解决与groupby
+(apply
)这个问题:
df.groupby('Name', as_index=False)\
.apply(lambda x: x.sort_values('Value').head(1))
Year Name Value
0 0 2001 Jack 44
1 2 2001 Jill 93
不是最好的方法,但我更感兴趣在发生什么,为什么。结果有一个MultiIndex
,看起来像这样:
MultiIndex(levels=[[0, 1], [0, 2]],
labels=[[0, 1], [0, 1]])
我不是在寻找一个解决办法。我其实更感兴趣知道为什么发生这种情况,以及如何在不改变方法的情况下防止它发生。
'df.groupby([ '名称'])[[ '年', '值'] MAX() .reset_index()'? –
@StefanoPotter其实,如果我最初的回答是误导性的,我希望摆脱最大行,道歉。 –
每当你使用apply并且数据的长度与它的启动方式不同时,熊猫将使用索引中的分组键。否则,如果您指定不使用分组键,pandas会将数据粘合在一起。如果您将索引指定为false,则熊猫将仅使用分组键的分解版本。 – piRSquared