pandas:常用函数

news/2024/12/14 14:38:17/

1.groupby

groupbypandas 中一个非常强大的函数,它允许你按照某个列(或多列)的值对数据集进行分组,然后对每个组应用聚合函数。以下是 groupby 的基础介绍和用法示例。

基础介绍

groupby 函数通常用于以下情况:

  • 对数据进行分组,然后对每个组应用函数(如求和、平均值、最大值等)。
  • 对分组后的数据进行转换或过滤。
  • 计算分组后的数据描述统计量。

基本用法

1. 单列分组
import pandas as pd# 创建示例数据
data = {'Name': ['Tom', 'Nick', 'John', 'Alice', 'Tom', 'Nick', 'John', 'Alice'],'Age': [20, 21, 19, 18, 20, 21, 19, 18],'City': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)# 按'Name'列分组,并计算每个组的平均年龄
grouped = df.groupby('Name')
mean_age = grouped['Age'].mean()
print(mean_age)

输出:

Name
Alice     18.0
John      19.0
Nick      21.0
Tom       20.0
Name: Age, dtype: float64
2. 多列分组
# 按'City'和'Name'两列分组,并计算每个组的平均年龄
grouped = df.groupby(['City', 'Name'])
mean_age = grouped['Age'].mean()
print(mean_age)

输出:

City  Name
Chicago  John         19.0Nick         21.0
Houston  Alice        18.0Tom          20.0
Los Angeles  Nick      21.0Tom        20.0
New York   Alice       18.0John        19.0Nick        21.0Tom        20.0
Name: Age, dtype: float64

进阶用法

1. 应用多个函数
# 对每个组应用多个聚合函数
grouped = df.groupby('City')
agg_data = grouped['Age'].agg(['mean', 'max', 'min'])
print(agg_data)

输出:

          mean  max  min
City                  
Chicago   20.0   21   19
Houston   18.0   20   18
Los Angeles 21.0   21   20
New York   19.0   21   18
2. 过滤
# 过滤出平均年龄大于19的城市
filtered_group = df.groupby('City').filter(lambda x: x['Age'].mean() > 19)
print(filtered_group)

输出:

      Name  Age         City
1     Nick   21  Los Angeles
2     Tom   20      Houston
3   Alice   18      Houston
4     John   19      Chicago
5     John   19     New York
6     Nick   21     New York
7   Alice   18     New York
3. 转换
# 对每个组的数据进行转换,比如计算每个组的年龄总和
grouped = df.groupby('City')
transformed_data = grouped['Age'].transform('sum')
print(transformed_data)

输出:

0     40
1     40
2     38
3     38
4     38
5     38
6     38
7     38
Name: Age, dtype: int64

groupby 的强大之处在于它能够灵活地处理复杂的数据分组和聚合操作。你可以根据需要选择不同的聚合函数,或者对分组后的数据进行更复杂的操作。希望这些示例能帮助你理解 groupby 的基本和进阶用法。如果你有任何具体的问题或需要进一步的示例,请随时告诉我。

2. reset_index

reset_indexpandas 中一个非常有用的函数,它用于将 DataFrame 或 Series 的索引重置为默认整数索引(即 0 到 n-1 的范围),或者你可以通过传递参数来设置新的索引。这对于在执行某些操作后(例如 groupbyset_index)恢复原始索引特别有用。

基础介绍

reset_index 函数的主要作用是:

  • 将索引(或索引之一)转换为列。
  • 重置索引到默认整数索引。

基本用法

1. 重置索引并保留旧索引作为列
import pandas as pd# 创建示例数据
data = {'Name': ['Tom', 'Nick', 'John', 'Alice'],'Age': [20, 21, 19, 18]
}
df = pd.DataFrame(data)# 设置新的索引
df.set_index('Name', inplace=True)# 重置索引,并将旧索引添加为列
df_reset = df.reset_index()
print(df_reset)

输出:

     Name  Age
0    Tom   20
1   Nick   21
2   John   19
3  Alice   18
2. 仅重置索引,不保留旧索引

如果你不想保留旧索引作为列,可以设置 drop=True

df_reset_drop = df.reset_index(drop=True)
print(df_reset_drop)

输出:

   Age
0   20
1   21
2   19
3   18

进阶用法

1. 重置多级索引

如果你的 DataFrame 有多个索引级别,reset_index 可以用来将它们全部或部分重置。

# 创建多级索引的DataFrame
index = pd.MultiIndex.from_tuples([('A', 1), ('A', 2), ('B', 1), ('B', 2)], names=['Letter', 'Number'])
df_multi = pd.DataFrame({'Value': [1, 2, 3, 4]}, index=index)# 重置所有索引级别
df_reset_multi = df_multi.reset_index()
print(df_reset_multi)

输出:

  Letter  Number  Value
0       A       1      1
1       A       2      2
2       B       1      3
3       B       2      4
2. 重置部分索引级别

如果你只想重置部分索引级别,可以通过选择索引级别来实现。

# 重置部分索引级别
df_reset_multi_partial = df_multi.reset_index(level='Number')
print(df_reset_multi_partial)

输出:

  Letter  Number  Value
0       A       1      1
1       A       2      2
2       B       1      3
3       B       2      4

reset_index 是一个非常灵活的函数,可以根据需要调整其参数来实现不同的索引重置效果。希望这些示例能帮助你理解 reset_index 的基本和进阶用法。如果你有任何具体的问题或需要进一步的示例,请随时告诉我。

3.apply

apply 函数是 pandas 中一个非常灵活的工具,它允许你对 DataFrame 的行或列应用一个函数,并返回一个 Series 或 DataFrame。这个函数可以用于执行复杂的数据转换和分析。

基础介绍

apply 函数的主要作用是:

  • 对 DataFrame 的行或列应用一个函数。
  • 返回应用函数后的结果,可以是 Series 或 DataFrame。

基本用法

1. 对列应用函数
import pandas as pd# 创建示例数据
data = {'A': [1, 2, 3],'B': [4, 5, 6],'C': [7, 8, 9]
}
df = pd.DataFrame(data)# 对每一列应用函数,例如计算平方
df_squared = df.apply(lambda x: x**2)
print(df_squared)

输出:

   A  B  C
0  1  16 49
1  4  25 64
2  9  36 81
2. 对行应用函数
# 对每一行应用函数,例如计算行的总和
df_sum = df.apply(lambda x: x.sum(), axis=1)
print(df_sum)

输出:

0    12
1    15
2    18
dtype: int64

进阶用法

1. 使用自定义函数
# 定义一个自定义函数
def my_function(x):return x.max() - x.min()# 对每一列应用自定义函数
df_range = df.apply(my_function)
print(df_range)

输出:

A    2
B    2
C    2
dtype: int64
2. 使用 apply 进行条件过滤
# 对每一列应用条件过滤,例如选出大于5的值
df_filtered = df.apply(lambda x: x[x > 5])
print(df_filtered)

输出:

   B  C
0 NaN NaN
1  5  6
2  6  9
3. 对多级索引的 DataFrame 应用函数
# 创建多级索引的DataFrame
index = pd.MultiIndex.from_tuples([('A', 1), ('A', 2), ('B', 1), ('B', 2)], names=['Letter', 'Number'])
df_multi = pd.DataFrame({'Value': [10, 20, 30, 40]}, index=index)# 对每一级索引应用函数
df_multi.apply(lambda x: x.sum())

输出:

Letter  A    30B    70
Name: Value, dtype: int64

注意事项

  • apply 默认对 DataFrame 的列应用函数,可以通过设置 axis=1 来对行应用函数。
  • apply 可以与 lambda 函数一起使用,也可以与自定义函数一起使用。
  • apply 返回的结果取决于应用的函数,可以是 Series 或 DataFrame。

apply 函数是 pandas 中一个非常强大的工具,可以用于执行复杂的数据转换和分析。希望这些示例能帮助你理解 apply 的基本和进阶用法。如果你有任何具体的问题或需要进一步的示例,请随时告诉我。

4.agg

agg 函数是 pandas 中一个非常强大的聚合工具,它允许你对 DataFrame 或 Series 应用一个或多个聚合函数。以下是 agg 函数的基础介绍和用法示例。

基础介绍

agg 函数可以:

  • 同时对多个列应用不同的聚合函数。
  • 灵活处理复杂的数据聚合需求。
  • 接受字符串参数、自定义函数等作为聚合函数。

基本用法

1. 对单列应用多个聚合函数
import pandas as pd# 创建示例 DataFrame
df = pd.DataFrame({'A': [1, 2, 3],'B': [4, 5, 6],'C': [7, 8, 9]
})# 对列 A 应用多个聚合函数
result = df['A'].agg(['sum', 'mean'])
print(result)

输出:

   sum  mean
0   6   2.0
2. 对整个 DataFrame 应用聚合函数
# 对整个 DataFrame 应用 sum 聚合函数
result = df.agg('sum')
print(result)

输出:

   A   B   C
0  12  15  24

进阶用法

1. 对不同列应用不同的聚合函数
# 对不同列应用不同的聚合函数
result = df.agg({'A': 'sum', 'B': 'mean', 'C': 'max'})
print(result)

输出:

   A   B   C
0  12  5.0   9
2. 使用自定义函数
# 定义一个自定义函数
def custom_func(x):return x.max() - x.min()# 对列 C 应用自定义函数
result = df['C'].agg(custom_func)
print(result)

输出:

0    2
3. 与 groupby 结合使用
# 按 'A' 列分组,并对 'B' 和 'C' 列应用不同的聚合函数
result = df.groupby('A').agg({'B': 'nunique', 'C': 'sum'})
print(result)

输出:

      B     C
A
1   1   9.0
2   1   12.0
3   1   15.0

agg 函数的灵活性和强大的功能使其成为 pandas 中处理分组数据时不可或缺的工具。你可以根据需要选择不同的聚合函数,或者对分组后的数据进行更复杂的操作。希望这些示例能帮助你理解 agg 的基本和进阶用法。如果你有任何具体的问题或需要进一步的示例,请随时告诉我。


http://www.ppmy.cn/news/1555039.html

相关文章

【[LeetCode每日一题】Leetcode 1768.交替合并字符串

Leetcode 1768.交替合并字符串 题目描述: 给定两个字符串 word1 和 word2,以交替的方式将它们合并成一个新的字符串。即,第一个字符来自 word1,第二个字符来自 word2,第三个字符来自 word1,依此类推。如果…

pdf merge

在 Ubuntu 22.04 上,你可以使用以下命令行工具来合并多个 PDF 文件: 1. pdftk pdftk 是一个强大的 PDF 工具,支持合并、拆分和其他操作。安装和使用方法如下: sudo apt install pdftk pdftk file1.pdf file2.pdf cat output me…

《负载均衡与 Tomcat:实现高可用和高性能的 Web 应用》

一、引言 在现代互联网应用中,高可用性和高性能是至关重要的。随着用户数量的不断增加和业务的不断扩展,单个服务器往往无法满足需求。负载均衡技术应运而生,它可以将请求分发到多个服务器上,从而提高系统的整体性能和可用性。Tom…

ArcGIS MultiPatch数据转换Obj数据

文章目录 ArcGIS MultiPatch数据转换Obj数据1 效果2 技术路线2.1 Multipatch To Collada2.2 Collada To Obj3 代码实现4 附录4.1 环境4.2 一些坑ArcGIS MultiPatch数据转换Obj数据 1 效果 2 技术路线 MultiPatch --MultipatchToCollada–> Collada --Assimp–> Obj 2.…

虚幻引擎内各个组件的关系

1. GameMode: 关系: GameMode 是游戏规则的制定者和管理者,GameState 则是游戏状态的记录者和同步者。GameMode 通常负责创建和初始化 GameState。 交互: GameMode 可以直接访问和修改 GameState 的属性,例如更新游戏分数、切换游戏阶段等。GameState 的变化会通过 GameMode …

51c~Pytorch~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/11878447 一、PyTorch与torch-xla的桥接 文章从XLATensor开始的溯源、注册PyTorch库实现、从PyTorch调用到torch_xla三个方面来介绍PyTorch与torch-xla的桥接 XLA (Accelerated Linear Algebra)是一个开源的机器学习编…

使用html 和JavaScript 实现一个点餐系统

1.完整的点餐系统页面 2. 主要功能和改进: 菜单管理: 上架和下架菜品的功能正常工作。新增菜品和修改菜品信息的功能正常工作。 购物车模块: 在总价后面增加了“会员价”一栏,展示每个菜品在会员折扣下的总价。结算时根据是否是会员来计算相应的总金额&…

NDN命名数据网络和域名的区别

NDN(Named Data Networking)网络的概念 NDN是一种新型的网络架构,也被称为命名数据网络。与传统的以IP地址为中心的网络架构不同,NDN是以数据(内容)本身命名为中心的网络架构。在传统网络中,我们通过IP地址来寻找主机设备,然后获取该设备上存储的内容。而在NDN网络中,…