关于程序员:如何使用-Pandas-进行数据逆透视和透视操作

35次阅读

共计 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 多平台公布

正文完
 0