pandas - 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()
但无法获得预期的结果。
关于如何解决这个问题的任何线索?
解决方案
我认为您需要更改聚合函数以避免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
推荐阅读
- angular - 获取订阅的最新价值
- css - 具有位置的Vue组件:绝对
- c - 在两个字节中发送一个整数
- swift - 即使禁用了对 URL 的评估,SSL 错误?
- bash - 如何在 bash 脚本中打印期望发送语句并进行比较
- angular-material2 - 如何在 Angular Material 的扩展面板中为图标设置动画?
- excel - 具有动态选择列表的 ActiveX 组合框
- postgresql - 我想在触发器中计算时间码块
- python - MS Azure autoML 准备中的错误 - 错误的文件格式/编码?
- google-sheets - 查询函数 - 日期错误的排序依据