Python: 使用pandas做樞紐分析有那些方法?pivot_table() = groupby() + pivot() ; crosstab()

加入好友
加入社群
Python: 使用pandas做樞紐分析有那些方法?pivot_table() = groupby() + pivot() ; crosstab() - 儲蓄保險王


在Pandas中,有几种方法可以进行数据透视操作。下面是其中几种常用的方法:

  1. pivot_table() 方法:这是 Pandas 中的一个内置函数,可以根据指定的行和列索引对数据进行聚合和透视。它的语法如下:
import pandas as pd

# 创建数据框
df = pd.DataFrame({
    'Category': ['A', 'B', 'A', 'B'],
    'Value': [10, 20, 30, 40],
    'Year': [2019, 2019, 2020, 2020]
})

# 使用 pivot_table 进行透视
pivot_df = df.pivot_table(index='Category', 
columns='Year', values='Value', aggfunc='sum')

print(pivot_df)

輸出結果:

Python: 使用pandas做樞紐分析有那些方法?pivot_table() = groupby() + pivot() ; crosstab() - 儲蓄保險王


groupby() 方法:这是另一种常用的分组和聚合数据的方法。你可以使用 groupby() 方法对数据进行分组,然后使用聚合函数(例如 sum()mean() 等)计算每个组的统计量。示例如下:

import pandas as pd

# 创建数据框
df = pd.DataFrame({
    'Category': ['A', 'B', 'A', 'B'],
    'Value': [10, 20, 30, 40],
    'Year': [2019, 2019, 2020, 2020]
})

# 使用 groupby 进行分组和聚合
grouped_df = df.groupby(['Category', 'Year'])['Value'].sum().unstack()

print(grouped_df)

輸出結果:

Python: 使用pandas做樞紐分析有那些方法?pivot_table() = groupby() + pivot() ; crosstab() - 儲蓄保險王


crosstab() 方法:这个方法可以用于计算两个或多个变量之间的交叉频数。它的语法如下:

import pandas as pd

# 创建数据框
df = pd.DataFrame({
    'Category': ['A', 'B', 'A', 'B'],
    'Value': [10, 20, 30, 40],
    'Year': [2019, 2019, 2020, 2020]
})

# 使用 crosstab 进行交叉频数计算
cross_df = pd.crosstab(index=df['Category'], 
columns=df['Year'], values=df['Value'], 
aggfunc='sum')

print(cross_df)

輸出結果:

Python: 使用pandas做樞紐分析有那些方法?pivot_table() = groupby() + pivot() ; crosstab() - 儲蓄保險王


pivot:

Python: 使用pandas做樞紐分析有那些方法?pivot_table() = groupby() + pivot() ; crosstab() - 儲蓄保險王

在这个代码段中,数据没有重复的索引组合,因为每个 CategoryYear 组合只出现一次。因此,pivot() 方法能够正常执行,将唯一的组合创建为透视表。
使用pivot較為受限
1. 沒有aggfunc參數,也因此會發生狀況2
2. 数据不能有重复的索引组合,不然會觸發
ValueError: Index contains duplicate entries, cannot reshape

Python: 使用pandas做樞紐分析有那些方法?pivot_table() = groupby() + pivot() ; crosstab() - 儲蓄保險王

pivot() 沒有aggfunc這個參數
df.pivot?

Python: 使用pandas做樞紐分析有那些方法?pivot_table() = groupby() + pivot() ; crosstab() - 儲蓄保險王

可以将 pivot_table() 看作是 groupby()pivot() 的结合。

groupby() 方法用于按照指定的列对数据进行分组,然后可以使用聚合函数对每个组进行聚合操作。而 pivot() 方法用于将数据进行重塑,将指定的行和列转换为新的形式。

pivot_table() 方法结合了这两个过程,它首先对数据进行分组(类似于 groupby()),然后根据分组后的结果进行重塑(类似于 pivot()),最后可以使用聚合函数对每个组进行聚合操作。

因此,可以将 pivot_table() 看作是将 groupby()pivot() 结合在一起的便捷方法,它可以在一步中完成数据的分组、重塑和聚合操作。

简单来说,pivot_table() 提供了更便捷的方式来进行数据透视和聚合操作,相比于手动使用 groupby()pivot() 分别进行处理,使用 pivot_table() 可以更简洁、高效地实现相同的功能。

推薦hahow線上學習python: https://igrape.net/30afN

加入好友
加入社群
Python: 使用pandas做樞紐分析有那些方法?pivot_table() = groupby() + pivot() ; crosstab() - 儲蓄保險王

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡

You may also like...

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *