大数跨境
0
0

超经典的Pandas “行<——>列” 转换教程!

超经典的Pandas “行<——>列” 转换教程! 数据分析与统计学之美
2021-04-28
2

鉴于一直以来,总有人在群里面或者私下问,Python行转列、列转行的问题。基于此,我这里写一篇较全的文章,分享给大家。

为了给大家更加细致的讲述本文,我这里给大家造一些详细的数据。本文看完即学会,黄同学保证的。

列转行

首先我们看一下“列转行”的问题。这里我们利用pandas构造了这样一份数据。
 
df = pd.DataFrame({"语文":[2,4],
                   "数学":[6,8]})
df.index = ["张三","李四"]
df
结果如下:
从表中可以看到:语文、数学都在列上面,我们如何将这些列转为行呢?这里有两种方式:
① stack()方法
 
df1 = df.stack().reset_index()
df1.columns = ["姓名","科目","成绩"]
df1
结果如下:
② melt()方法
由于这个函数参数多一些,我这里给大家先讲一下语法。
  • id_vars:列转行,不变的那一列;
  • value_vars:列转行,需要变动的那些列的列名;
  • var_name:列转为行后,新表的列名;
  • value_name:列转为行后,新表的值那一列的列明;
首先,我们再看看原来的数据长啥样。
接着,我们进行reset_index()操作后,再看看数据长啥样。
我们就是要利用这个数据,完成最终的操作。
 
df2 = df2.melt(id_vars='index',value_vars=['语文','数学'],var_name="科目",value_name="成绩")
df2.rename(columns={"index":"姓名"},inplace=True)
df2
结果如下:

行专列

“行专列”这个需求,大家应该都见过。因为我们只要是用过数据透视表的同学,应该都知道这个需求。
我们在为大家构造一份数据,接着看。
 
df = pd.DataFrame({"姓名":["张三","李四","张三","李四"],
                   "科目":["语文","语文","数学","数学"],
                   "成绩":[2,4,6,8]})
df
结果如下:
在pandas中,我们使用pivot_table()函数,来完成“行转列”的需求。在写代码之前,我先为大家讲解一下这个函数。
 
pd.pivot_table(data,index=None,columns=None,
               values=None,aggfunc='mean',
               margins=False,margins_name='All',
               dropna=True,fill_value=None)
其中:
  • data:相当于Excel中的"选中数据源";
  • index:相当于上述"数据透视表字段"中的行;
  • columns:相当于上述"数据透视表字段"中的列;
  • values:相当于上述"数据透视表字段"中的值;
  • aggfunc:相当于上述"结果"中的计算类型;
  • margins:相当于上述"结果"中的总计;
  • margins_name:相当于修改"总计"名,为其它名称;
对应到Excel中,大致如下图:
知道基础后,那么如何完成本文的需求呢?
 
df1 = pd.pivot_table(df,index ='姓名',columns='科目',values='成绩')
df1
# ------------------------------
df1.columns.name = None
df1.index.name = None
df1
结果如下:
今天的内容大致就到这里,你学会了吗?如果还是有点模糊,可能还是函数参数太多导致的,大家下去仔细研究一下函数,即可!
↓↓↓推荐↓↓↓
知识改变命运黑科技改变生活
关注下方公众号,为您的生活增色添彩
丽丽姑娘的黑科技
【声明】内容源于网络
0
0
数据分析与统计学之美
免费领10w字"Python知识手册",共400页,后台回复“十万”领取!
内容 1080
粉丝 0
数据分析与统计学之美 免费领10w字"Python知识手册",共400页,后台回复“十万”领取!
总阅读76
粉丝0
内容1.1k