pandas对数据进行分组统计
在数据处理的过程,有可能需要对一堆数据分组处理,例如对不同的列进行agg聚合操作(mean,min,max等等),以下将介绍pandas中进行数据分组处理的方法代码如下(示例):自定义函数,配合agg进行分组统计# 通过自定义函数实现分组统计。......
·
pandas对数据进行分组统计
前言
在数据处理的过程,有可能需要对一堆数据分组处理,例如对不同的列进行agg聚合操作(mean,min,max等等),以下将介绍pandas中进行数据分组处理的方法
一、分组后进行sum操作
可以根据单列或者多列来对数据进行分组,分组后对特定列进行sum操作
代码如下(示例):
根据单列(job_title)对数据进行分组,对某列数据(salary_in_usd)进行sum
# 按照单列进行分组统计
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_csv('ds_salaries.csv')
# print(df)
df1 = df[['job_title', 'salary_in_usd']]
# print(df1)
df1 = df1.groupby('job_title').sum()
print(df1)
根据多列(job_title,employee_residence)进行分组,对某列数据(salary_in_usd)进行sum
# 按照多列进行分组统计
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_csv('ds_salaries.csv')
# print(df.columns)
df2 = df[['job_title', 'employee_residence', 'salary_in_usd']]
# print(df2)
df2 = df2.groupby(['job_title', 'employee_residence']).sum()
print(df2)
根据多列进行分组统计(job_title,work_year ),对多列中的特定列(salary_in_usd)进行sum操作
# 按照多列进行分组,并对特定列进行统计
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_csv('ds_salaries.csv')
# print(df.columns)
df2 = df[['job_title', 'work_year', 'salary_in_usd', 'employment_type']]
# print(df2)
df2 = df2.groupby(['job_title', 'work_year'])['salary_in_usd'].sum()
print(df2)
二、分组后进行迭代操作
代码如下(示例):
根据单列进行分组后,使用for循环进行迭代
# 单列分组,迭代查看
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_csv('ds_salaries.csv')
df1 = df[['job_title', 'salary_in_usd']]
df2 = df1.groupby('job_title')
print(df2) #groupby后产生一个DataFrameGroupBy对象
for name, group in df2:
print(name)
print(group)
print('----------')
根据多列进行分组后,使用for循环进行迭代
# 多列分组,迭代查看
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_csv('ds_salaries.csv')
# print(df)
df1 = df[['job_title', 'work_year', 'salary_in_usd']]
df2 = df1.groupby(['job_title', 'work_year'])
for (k1, k2), group in df2:
print(k1, k2)
print(group)
print('----------------')
三、分组后进行聚合agg操作
代码如下(示例):
分组后求平均值
# groupby和agg搭配使用
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_csv('ds_salaries.csv')
df1 = df[['job_title', 'salary_in_usd']]
df2 = df1.groupby('job_title').agg(['mean'])
print(df2)
分组后以字典的形式对特定列使用特定的聚合agg函数
# groupby和agg搭配使用,特定列使用特定聚合函数
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_csv('ds_salaries.csv')
# print(df)
df1 = df[['job_title', 'salary_in_usd', 'remote_ratio']]
# print(df1.head())
df2 = df1.groupby('job_title').agg( {'remote_ratio' : ['mean'], 'salary_in_usd' : ['max', 'min', 'mean']})
print(df2)
四、使用自定义函数进行统计
代码如下(示例):
自定义函数,配合agg进行分组统计
# 通过自定义函数实现分组统计
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_csv('ds_salaries.csv')
# print(df['job_title'].value_counts())
# 使用lambda创建匿名函数
maxcount = lambda x : x.value_counts().index[0]
# maxcount._name_ = '人数最多的岗位'
df1 = df.agg({'job_title' : [maxcount]})
print(df1)
五、使用dic、series进行分组统计
代码如下(示例):
使用dic进行分组统计
# 通过字典实现分组统计
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
index = ['zhangsan', 'lisi', 'wangwu']
columns = ['gaungzhou', 'shanghai', 'beijing', 'hangzhou']
data = [[10, 20, 30, 40], [90, 100, 20, 30], [66, 77, 88, 99]]
df = pd.DataFrame(data = data, index = index, columns = columns)
# print(df)
dic = {
'gaungzhou' : '1',
'shanghai' : '1',
'beijing' : '2',
'hangzhou' : '2'
}
df1 = df.groupby(dic, axis = 1).sum()
print(df1)
使用series进行分组统计
# 通过series对象是想分组统计
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
index = ['zhangsan', 'lisi', 'wangwu']
columns = ['gaungzhou', 'shanghai', 'beijing', 'hangzhou']
data = [[10, 20, 30, 40], [90, 100, 20, 30], [66, 77, 88, 99]]
df = pd.DataFrame(data = data, index = index, columns = columns)
# print(df)
dic = {
'gaungzhou' : '1',
'shanghai' : '1',
'beijing' : '2',
'hangzhou' : '2'
}
ss = pd.Series(dic)
# print(ss)
df1 = df.groupby(ss, axis = 1).sum()
print(df1)
总结
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas中分组的操作,pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
更多推荐
已为社区贡献1条内容
所有评论(0)