首页 > 解决方案 > Pandas 展平复杂的多级列数据框

问题描述

我最初有一个带有列 ID 和日期的数据框,我想找到每个 ID 的第一个和最后一个日期条目。

因此我应用了一个聚合函数:

df.groupby('ID').agg({'Date':['first','last']})

我有以下形式的数据框:

数据框

print(df.columns)
>> MultiIndex(levels=[['Date', 'ID', 'difference'], ['first', 'last', '']],
       labels=[[1, 0, 0, 2], [2, 0, 1, 2]])

我想展平这个数据框,以便我以下列方式获取数据框:

在此处输入图像描述

我尝试使用df.reset_index(level=[0]) 并且也使用df.unstack()但无法获得预期的结果。

关于如何解决这个问题的任何线索?

标签: pandas

解决方案


我认为您需要更改聚合函数以避免MultiIndex在具有指定聚合列和聚合函数列表的列中:

rng = pd.date_range('2017-04-03', periods=10)
df = pd.DataFrame({'Date': rng, 'id': [23] * 5 + [35] * 5})  
print (df)
        Date  id
0 2017-04-03  23
1 2017-04-04  23
2 2017-04-05  23
3 2017-04-06  23
4 2017-04-07  23
5 2017-04-08  35
6 2017-04-09  35
7 2017-04-10  35
8 2017-04-11  35
9 2017-04-12  35

df1 = df.groupby('id')['Date'].agg(['first','last']).reset_index()
print (df1)
   id      first       last
0  23 2017-04-03 2017-04-07
1  35 2017-04-08 2017-04-12

推荐阅读