Pandas中的Groupby函数可以实现基于某个或多个关键字将数据集分组,以进行进一步的操作和分析。通常,groupby操作包括splitting(按条件分组)、applying(对每个组应用函数)和combining(将结果组合成数据结构)。
Pandas中Groupby的聚合操作是最常见的使用场景,它可以对组内的数据进行一些简单的统计分析,比如求平均数、求和等。然而,在一些特殊场景下,我们并不需要对组内的数据进行聚合操作,仅仅是将数据按照某个或多个关键字分组,这时候需要用到没有聚合的groupby,下面是实现这个功能的完整攻略。
1. 按列分组
可以使用groupby()
函数,按照某列来进行分组。例如,我们有一个包含姓名、性别、国家、城市和收入五个列的DataFrame,现在需要按照国家来进行分组。
import pandas as pd
data = {'name': ['Tom', 'Lily', 'Lucas', 'Milo', 'Eva', 'Lucy'],
'gender': ['M', 'F', 'M', 'M', 'F', 'F'],
'country': ['China', 'USA', 'USA', 'China', 'USA', 'China'],
'city': ['Beijing', 'New York', 'Washington', 'Shanghai', 'California', 'Beijing'],
'income': [10000, 20000, 25000, 8000, 30000, 20000]}
df = pd.DataFrame(data)
grouped = df.groupby('country')
这时候,我们得到的是一个DataFrameGroupBy对象,表示按照国家将数据集分为了三个组(China、USA、Washington)。这个对象是一个中间状态,可以进行进一步的操作。
2. 遍历分组
只要得到了DataFrameGroupBy对象,我们就可以遍历分组了。
for key, group in grouped:
print(key)
print(group)
其中,key是分组标准,group是分组后的数据集。这时候,输出的结果就是按照国家分组后的数据集。
3. 按多个列分组
在实际使用中,我们往往需要同时按照多个列进行分组。这时候,只需要传入多个列名即可。
grouped = df.groupby(['country', 'gender'])
这时候,可以用grouped.size()
来查看各组大小,也可以遍历各组,进行统计分析。
4. 按照索引分组
除了按列分组,我们还可以按照行索引来分组。只需要传入level=0
即可。
indexed_df = df.set_index('name')
grouped = indexed_df.groupby(level=0)
这时候,grouped就是按照姓名来分组后的数据集。可以用各种函数进行统计分析。
5. 筛选某组数据
在Groupby和没有Groupby的情况下,筛选出某组特定的数据都是很常见的操作。在没有Groupby的情况下,我们可以使用df[df['country']=='China']
这样的方式进行筛选。在Groupby的情况下,我们可以使用get_group()
方法。
china_group = grouped.get_group('China')
这时候,china_group就是国家为China的分组数据集。
综上,在Pandas中,没有聚合的Groupby分组技巧有:按列分组、遍历分组、按多个列分组、按索引分组、筛选特定组的数据。这些技巧可以满足基本需求。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pandas中没有聚合的Groupby - Python技术站