Python中Pandas基于Groupby可能会产生复合索引的问题

 在Python中,基于Pandas对数据进行处理时,Groupby能够方便的对数据进行分类统计。但是,groupby操作后可能会产生复合索引,这个问题会导致数据无法提取。

例如以下问题:有一个航班数据,如下图

这个航班数据需要按照年份统计,从而能够得到每年的乘客数量变化情况,因此,我首先读入数据:

import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
data = pd.read_csv('flights.csv')

紧接着,我基于groupby对数据按照年份进行汇总,并求和,代码如下

year_passengers = data.groupby('year').agg('sum')

这个时候我发现,我分组求和后的数据打印出来如下

这时明显产生了复合索引,也就是我无法提取单列的数据,无法进行分析

实际上,我为了消除复合索引的影响,我只需要添加一个参数,就是在groupby函数中添加

year_passengers = data.groupby('year', as_index=False).agg('sum')

这样所产生的数据矩阵便可以自由提取数据

同时在知乎上也搜到同样问题:

Pandas如何将Series的复合索引提取为列?

使用Python的Pandas库处理数据,现在有一个DataFrame,比如TMP=DataFrame({'key1':['A','B','A','B'],'key2':['X','X','X','X'],'key3':[1,2,3,4]}),执行TMP=TMP.groupby(['key1','key2']).sum(),之后,会成为
key3
key1 key2
A X 4
B X 6
这样的一个有复合索引的Series,我如果想把它做成一个
key1 key2 key3
0 A X 4
1 B X 6
这样的DataFrame,我应该做什么操作呢?

能够得到答案:

TMP.groupby(['key1','key2'], as_index=False).sum()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值