在Pandas中,有几种方法可以进行数据透视操作。下面是其中几种常用的方法:
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)
輸出結果:
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)
輸出結果:
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)
輸出結果:
pivot:
在这个代码段中,数据没有重复的索引组合,因为每个 Category
和 Year
组合只出现一次。因此,pivot()
方法能够正常执行,将唯一的组合创建为透视表。
使用pivot較為受限
1. 沒有aggfunc參數,也因此會發生狀況2
2. 数据不能有重复的索引组合,不然會觸發
ValueError: Index contains duplicate entries, cannot reshape
pivot() 沒有aggfunc這個參數
df.pivot?
可以将 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
近期留言