共计 1577 个字符,预计需要花费 4 分钟才能阅读完成。
Pandas 是 Python 语言中十分风行的数据处理库,其中的逆透视和透视操作在数据重塑方面是相当弱小的。本文将介绍如何应用 Pandas 中的 pd.melt() 和 pd.pivot() 函数进行数据逆透视和透视操作。
首先,咱们来看一个示例数据集:
import pandas as pd
# 结构测试数据
data = {'channel': ['A', 'B', 'C'],
'level': ['L1', 'L2', 'L3'],
'Jan': [100, 200, 300],
'Feb': [150, 250, 350],
'Mar': [200, 300, 400]}
da = pd.DataFrame(data)
以上代码生成了一个蕴含三个渠道、三个级别和三个月份销售额的数据集。其中,每个月份的销售额都被存储在一个独立的列中,这种表格模式称为宽表格(wide format)。
接下来,咱们将应用 pd.melt() 函数将宽表格转换为长表格(long format),以便于进一步剖析和可视化数据
def melt_data(df):
# 应用 pd.melt() 函数进行逆透视列操作
df_melted = pd.melt(df, id_vars=['channel', 'level'], var_name='month', value_name='value')
return df_melted
df_melted = melt_data(da)
print(df_melted)
以上代码中,咱们首先定义了一个名为 melt_data() 的函数,该函数应用 pd.melt() 函数进行逆透视列操作。其中:
- id_vars:须要保留在后果表格中的列名。
- var_name:新生成的列名,存储了原始表格中每个月份的列名。
- value_name:新生成的列名,存储了原始表格中每个月份对应的值。
pd.melt() 函数将宽表格转换为长表格后,后果表格的每一行都蕴含了一个渠道、一个级别和一个月份的销售额。
接下来,咱们将应用 pd.pivot() 函数将长表格转换回宽表格。具体而言,咱们将以 channel 和 level 列作为索引,以 month 列为列名,以 value 列为值,从而从新结构出一个与原始数据集雷同的宽表格模式。
def pivot_data(df):
# 应用 pd.pivot() 函数进行转换操作
df_pivoted = pd.pivot(df, index=['channel', 'level'], columns='month', values='value')
# 将列名依照冀望程序进行从新赋值,并应用 loc[] 函数进行列的重排
new_columns = ['Jan', 'Feb', 'Mar']
df_pivoted = df_pivoted.loc[:, new_columns]
# 去掉列字段名称
df_pivoted.columns.name = None
# 重置索引并返回解决后的数据
return df_pivoted.reset_index()
df_pivoted = pivot_data(df_melted)
print('\n',df_pivoted)
# 保留后果
df_pivoted.to_csv('sales_data.csv', index=False)
以上代码中,咱们首先定义了一个名为 pivot_data() 的函数,该函数应用 pd.pivot() 函数进行转换操作。其中:
- index:须要用作新表格索引的列名。
- columns:须要将其转换为新表格列名的列名。
- values:须要填充到新表格中的值。
pd.pivot() 函数将长表格转换回宽表格后,后果表格的每一行都蕴含了一个渠道、一个级别和三个月份的销售额。
最初,咱们能够通过以下代码将后果表格存储到一个 CSV 文件中。
本文介绍了如何应用 Pandas 中的 pd.melt() 和 pd.pivot,心愿对大家有启发!
本文由 mdnice 多平台公布