欢迎访问宙启技术站
智能推送

在Pandas中如何使用DataFrame进行数据分组和聚合

发布时间:2023-12-22 20:58:47

在Pandas中,可以使用DataFrame进行数据分组和聚合,以便对数据进行统计、计算和分析。下面将介绍如何使用DataFrame进行数据分组和聚合,并提供一些示例。

首先,我们需要导入Pandas库,并创建一个DataFrame对象。DataFrame是一个二维表格数据结构,类似于Excel中的电子表格。

import pandas as pd

# 创建一个DataFrame对象
data = {'Name': ['Amy', 'Bob', 'Tom', 'Amy', 'Tom'],
        'Age': [23, 25, 22, 24, 22],
        'Gender': ['Female', 'Male', 'Male', 'Female', 'Male'],
        'Salary': [3000, 3500, 4000, 3200, 3800]} 

df = pd.DataFrame(data)
print(df)

输出结果如下:

  Name  Age  Gender  Salary
0  Amy   23  Female    3000
1  Bob   25    Male    3500
2  Tom   22    Male    4000
3  Amy   24  Female    3200
4  Tom   22    Male    3800

接下来,我们可以使用DataFrame的groupby()方法进行数据分组。groupby()方法接收一个或多个列名作为参数,将数据按照指定的列进行分组。

# 按照Name列进行分组
grouped = df.groupby('Name')

然后,我们可以对分组后的数据进行聚合操作。常用的聚合操作包括计数、求和、求平均值、求最大值、求最小值等。

# 计算每个人的平均工资
average_salary = grouped['Salary'].mean()
print(average_salary)

输出结果如下:

Name
Amy    3100.0
Bob    3500.0
Tom    3900.0
Name: Salary, dtype: float64

除了平均值,我们还可以计算其他聚合指标,比如总和、最大值和最小值。

# 计算每个人的总工资和最高工资
total_salary = grouped['Salary'].sum()
max_salary = grouped['Salary'].max()
min_salary = grouped['Salary'].min()

print(total_salary)
print(max_salary)
print(min_salary)

输出结果如下:

Name
Amy     6200
Bob     3500
Tom     7800
Name: Salary, dtype: int64
Name
Amy    3200
Bob    3500
Tom    4000
Name: Salary, dtype: int64
Name
Amy    3000
Bob    3500
Tom    3800
Name: Salary, dtype: int64

此外,我们还可以对分组后的数据进行排序、过滤和转换等操作。

# 按照平均工资降序排序
sorted_df = df.sort_values(by='Salary', ascending=False)
print(sorted_df)

# 过滤出工资大于3500的数据
filtered_df = df[df['Salary'] > 3500]
print(filtered_df)

# 对每个分组的工资进行标准化处理
df['Normalized_Salary'] = grouped['Salary'].transform(lambda x: (x - x.mean()) / x.std())
print(df)

输出结果如下:

  Name  Age  Gender  Salary
2  Tom   22    Male    4000
4  Tom   22    Male    3800
1  Bob   25    Male    3500
3  Amy   24  Female    3200
0  Amy   23  Female    3000

  Name  Age Gender  Salary
2  Tom   22   Male    4000

  Name  Age  Gender  Salary  Normalized_Salary
0  Amy   23  Female    3000          -1.224745
1  Bob   25    Male    3500           0.000000
2  Tom   22    Male    4000           1.224745
3  Amy   24  Female    3200          -0.816497
4  Tom   22    Male    3800           0.816497

在进行数据分组和聚合时,还可以根据多个列进行分组,比如同时按照Name和Gender列进行分组。

grouped = df.groupby(['Name', 'Gender'])

接下来,我们可以根据分组后的结果进行聚合操作,比如计算每个人在每个性别下的平均工资。

average_salary = grouped['Salary'].mean()
print(average_salary)

输出结果如下:

Name  Gender
Amy   Female    3100.0
Bob   Male      3500.0
Tom   Male      3900.0
Name: Salary, dtype: float64

通过以上示例,我们了解了如何使用DataFrame进行数据分组和聚合操作。在实际应用中,数据分组和聚合是常见的操作,涉及到统计数据、汇总数据和分析数据等场景。掌握Pandas中DataFrame的分组和聚合功能,可以更高效地处理和分析数据,提取出有用的信息和洞察。