美文网首页
如何使用 Pandas 进行数据逆透视和透视操作

如何使用 Pandas 进行数据逆透视和透视操作

作者: 价值INVEST | 来源:发表于2023-05-30 11:09 被阅读0次

    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多平台发布

    相关文章

      网友评论

          本文标题:如何使用 Pandas 进行数据逆透视和透视操作

          本文链接:https://www.haomeiwen.com/subject/gsosedtx.html