【跟着stackoverflow学Pandas】--Converting a Pandas GroupBy object to DataFrame-Groupby对象转换为DataFrame

最近做一个系列博客,跟着stackoverflow学Pandas。

专栏地址:http://blog.csdn.net/column/details/16726.html

以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序:
https://stackoverflow.com/questions/tagged/pandas?sort=votes&pageSize=15

Converting a Pandas GroupBy object to DataFrame-Groupby对象转换为DataFrame

split-apply-combine

我们在对数据进行清洗时,经常要用到split-apply-combine,首先对数据按照一定的标准进行split(分组),然后对每组数据进行apply(处理),最后把结果combine(合并),在这一系列操作中就必须要用到 pandas的groupby函数。
具体可以参考官方文档:

https://pandas.pydata.org/pandas-docs/stable/groupby.html

很多时候,GroupBy 对象不方便我们下一步操作,我们喜欢把他转化为DataFrame。下面介绍几种常用的方法。

参考:

https://stackoverflow.com/questions/10373660/converting-a-pandas-groupby-object-to-dataframe

转换

import pandas as pd
print(pd.__version__)
# 0.20.3


df1 = pd.DataFrame({"Name":["Alice", "Bob", "Mallory", "Mallory", "Bob" , "Mallory"],
                    "City":["Seattle","Seattle","Portland","Seattle","Seattle","Portland"]})
df1
#
#       City     Name
#0   Seattle    Alice
#1   Seattle      Bob
#2  Portland  Mallory
#3   Seattle  Mallory
#4   Seattle      Bob
#5  Portland  Mallory
#
g1 = df1.groupby(["Name", 'City']).size() 
g1
# Name     City    
# Alice    Seattle     1
# Bob      Seattle     2
# Mallory  Portland    2
#          Seattle     1

# 如果要使用count,必须这样

df1.groupby(["Name", "City"])[['Name','City']].count()
#             Name  City
# Name  City        
# Alice Seattle 1   1
# Bob   Seattle 2   2
# Mallory   Portland    2   2
#          Seattle  1   1

此时得到的g1数据已经是DataFrame格式, 但是属于MultiIndex, 如果想得到方方正正的DataFrame格式,可以采用 reset_index()函数。

type(g1)
# pandas.core.frame.DataFrame

g1.index
# MultiIndex(levels=[['Alice', 'Bob', 'Mallory'], ['Portland', 'Seattle']],
#            labels=[[0, 1, 2, 2], [1, 1, 0, 1]],
#            names=['Name', 'City'])

g1.reset_index()
print(g1.reset_index())

#       Name      City  0
# 0    Alice   Seattle  1
# 1      Bob   Seattle  2
# 2  Mallory  Portland  2
# 3  Mallory   Seattle  1

count和size的区别

这里出现的count和size的区别,如果想深究可以参考:
size 是考虑 NaN的计数,而 count 则不考虑。

https://stackoverflow.com/documentation/pandas/1822/grouping-data/6874/aggregating-by-size-and-count#t=201607220906502658034

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

探索者v

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值