pivot_table
pandas
的pivot_table
函数是一个非常有用的工具,用于创建一个数据透视表,这是一种用于数据总结和分析的表格形式。
以下是pivot_table
的基本语法:
pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')
函数参数解释:
- data: 需要创建透视表的 DataFrame。
- values: 需要进行聚合的列名。
- index: 透视表的行标签。
- columns: 透视表的列标签。
- aggfunc: 聚合函数或函数列表。默认是 ‘mean’。可以是 ‘sum’, ‘count’, ‘min’, ‘max’, ‘median’, ‘var’, ‘std’ 等,或者是使用 numpy 的函数,例如 np.sum。
- fill_value: 替换结果表中的缺失值的值。
- margins: 添加行/列边际(小计和总计)。
- dropna: 不包括具有空值的列。
- margins_name: 边际列的名称,默认为 ‘All’。
运用场景
【需求场景描述】:将多行的数据转换为多列
当aggfunc
不设置参数时默认使用mean
对数据进行聚合。
也就是说对于index
和columns
是能够唯一标识数据的话,我们就可以利用pivot_table
对数据转置。
以下是我遇到的一个场景实例:
将一个列分类变量,比如stock_id
对应多个stock
。
但是当我们想用所有的stock
在同一时刻的数据来预测整体index
指数数据。
就需要将长面板数据转换为宽面板数据。从而能够用一个市场整体的数据来预测一个指标走势。
实现代码
columns_list = [i for i in df.columns if 'id' not in i and i != 'seconds_in_bucket']
df_pitvot = pd.pivot_table(df,index=['date_id','seconds_in_bucket'], columns=['stock_id'],values=columns_list)
转换前的数据
df.head(50)
转换后的数据