pandas数据处理,行列转换

Posted 詩和遠方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas数据处理,行列转换相关的知识,希望对你有一定的参考价值。

概述

用Python实现之前文章中用SQL实现的转换,交叉表转为长宽表。

数据准备

import pandas as pd
df = pd.read_csv(r'D:\\CategoryConfig.csv')
df
CategoryLevelABCD
0Online1234345644987
1Online2213456543657
2Online3321323456657
3Offline1455246756432
4Offline2435678984345
5Offline3567325343456

方法一,先列转行(UnPivot),拼接后再行转列(Pivot)

# melt方法列转行,然后拼接新列
df_melt = df.melt(id_vars = ['Category','Level'],value_vars=['A','B','C','D'],var_name='Type')
df_melt['xType'] = df_melt['Type'] + '-' + df_melt['Level'].astype(str)
df_melt.head()
CategoryLevelTypevaluexType
0Online1A234A-1
1Online2A213A-2
2Online3A321A-3
3Offline1A455A-1
4Offline2A435A-2
# 数据透视
df_result = pd.pivot_table(df_melt[['Category','xType','value']],
                           index='Category',
                           columns='xType',
                           values = 'value',
                           aggfunc='max')
df_result.reset_index(inplace=True)
df_result
xTypeCategoryA-1A-2A-3B-1B-2B-3C-1C-2C-3D-1D-2D-3
0Offline455435567246678325756984343432345456
1Online234213321345456323644543456987657657

方法二,先透视,再重命名列名

df_result = pd.pivot_table(df,index='Category',columns='Level')
df_result
ABCD
Level123123123123
Category
Offline455435567246678325756984343432345456
Online234213321345456323644543456987657657

如上所示,列名为双层索引结构,下一步将其压平为一层结构

df_result.columns = ['-'.join(map(str,c)) for c in df_result.columns]
df_result.reset_index(inplace=True)
df_result
CategoryA-1A-2A-3B-1B-2B-3C-1C-2C-3D-1D-2D-3
0Offline455435567246678325756984343432345456
1Online234213321345456323644543456987657657

以上是关于pandas数据处理,行列转换的主要内容,如果未能解决你的问题,请参考以下文章

pandas数据处理,行列转换

pandas 关于行列选取的关系

python:pandas之DataFrame取行列(df.loc(),df.iloc())以及索引

Pandas3——excel【行、列、单元格】

pandas读取excel的方式介绍行列元素访问以及读取数据后使用matplotlib画折线图

pandas的行列显示不全的解决方法