数据分析 — Pandas 分组聚合

一、函数应用和映射

1、apply

pandas.apply() 是 Pandas 库中的一个函数,用于在 DataFrame 或 Series 上应用自定义函数。这个函数可以沿着指定的轴(行或列)逐行或逐列地应用函数,从而实现对数据的定制化操作。

参数:

  • func(必需):这是要应用的函数,可以是一个 Python 函数、lambda 函数或可调用对象。这个函数将应用于 Series 或 DataFrame 的每个元素或行/列,具体取决于 axis 参数的设置。

  • axis(可选):指定函数应用的轴方向。有两个选项:

    • axis=0(默认值):将函数应用于每一列,即按列方向操作。

    • axis=1:将函数应用于每一行,即按行方向操作。

  • raw(可选):一个布尔值,用于控制是否将数据以 NumPy 数组的形式传递给函数。有两个选项:

    • raw=False(默认值):表示将数据以 Series 或 DataFrame 的形式传递给函数。
    • raw=True:表示数据以 NumPy 数组形式传递给函数,这在某些情况下可能提高性能。
  • result_type(可选):指定函数的返回类型。有两个选项:

    • expand(默认值):如果函数返回的是 Series,则将其扩展为 DataFrame。
    • reduce:如果函数返回的是标量(如一个数字),则返回一个标量;如果返回的是 Series,则返回一个 Series。
  • args(可选):一个元组,包含传递给函数的额外参数。这可以用来向函数传递额外的参数。

  • **kwds(可选):关键字参数,用于传递给函数的额外关键字参数。

import pandas as pd  # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {
   
   'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
print("原df\n", df)
# 原df
#     A   B
# 0  1  10
# 1  2  20
# 2  3  30
# 3  4  40
# 4  5  50

# 使用 lambda 函数将每个元素加倍
df['A2'] = df['A'].apply(lambda x: x * 2)
print("A列2倍处理后的df\n", df)
# A列2倍处理后的df
#     A   B  A2
# 0  1  10   2
# 1  2  20   4
# 2  3  30   6
# 3  4  40   8
# 4  5  50  10

# 增加新列 Row_Sum,值为A列和B列对应位置相加的结果
def row_sum(row):
    return row['A'] + row['B']
df['Row_Sum'] = df.apply(row_sum, axis=1)
print("增加AB两列和后的df\n", df)
# 增加AB两列和后的df
#     A   B  A2  Row_Sum
# 0  1  10   2       11
# 1  2  20   4       22
# 2  3  30   6       33
# 3  4  40   8       44
# 4  5  50  10       55

2、map

pandas.map() 是 Pandas 库中的一个方法,主要用于对 Series 中的每个元素应用一个函数或一个字典,将每个元素映射到另一个值上。它可以用于进行元素级的转换,从而创建新的 Series。

参数:

  • arg(必需):这是映射函数、字典或其它可映射对象,用于将 Series 中的元素映射到新的值。可以是以下几种类型:
    • 一个函数:将应用于 Series 中的每个元素,函数的返回值将作为新的值。
    • 一个字典:将 Series 中的值与字典中的键进行匹配,并将对应的值用作新的值。
    • 一个 Series 或其它可映射的 Pandas 对象:将 Series 中的值与可映射对象中的索引或标签匹配,并将对应的值用作新的值。
  • na_action (可选):指定对于 Series 中的缺失值如何处理。有两个选项:
    • ignore(默认值):忽略缺失值,不进行映射,将缺失值保留不变。
    • raise:如果 Series 中存在缺失值,则引发异常。
import pandas as pd  # 导入 Pandas 库并使用别名 pd
# 创建一个示例 Series
data = {
   
   'A': ['apple', 'banana', 'cherry', 'date']}
s = pd.Series(data['A'])
# 使用字典映射元素到新的值
dict1 = {
   
   'apple': 'fruit', 'banana': 'fruit', 'cherry': 'fruit'}
s_mapped = s.map(dict1)
print(s_mapped)
# 0    fruit
# 1    fruit
# 2    fruit
# 3      NaN
# dtype: object

# 使用函数映射元素到新的值
def func(x):
    if x in ['apple', 'banana', 'cherry']:
        return 'fruit'
    else:
        return 'other'

s_mapped2= s.map(func)
print(s_mapped2)
# 0    fruit
# 1    fruit
# 2    fruit
# 3    other
# dtype: object

二、汇总和描述统计

1、计算平均值

import pandas as pd  # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {
   
   'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
# 计算平均值
mean_A = df['A'].mean()
mean_B = df['B'].mean()
print(f'A列平均值: {
     
     mean_A}')  # A列平均值: 3.0
print(f'B列平均值: {
     
     mean_B}')  # B列平均值: 30.0

2、计算中位数

import pandas as pd  # 导入 Pandas 库并使用别名 pd
# 创建一个示例 DataFrame
data = {
   
   'A': [1, 2
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值