Python 重塑数据帧,更改列的位置

Python 重塑数据帧,更改列的位置,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框架如下,我想重塑数据的形式如下,我从早上开始就在做这个任务,我无法解决它,有人能帮我吗 2019. C1. 2018. C2 2017 C3 FF. 20. TT. 70. HH. 88 DD. 22. JJ. 66. DD. 99 重塑为: COL1. C FF. 20. 2019 DD. 22. 2019 TT. 70. 201

我有一个数据框架如下,我想重塑数据的形式如下,我从早上开始就在做这个任务,我无法解决它,有人能帮我吗

2019.    C1.   2018.   C2    2017     C3
FF.       20.   TT.    70.   HH.      88
DD.       22.   JJ.    66.   DD.      99

重塑为:

COL1.   C

FF.     20.    2019
DD.     22.    2019
TT.     70.    2018
JJ.     66.    2108
HH.     88.    2017
DD.     99.    2017

我认为您想要的输出中有一个小的输入错误,您有
2108
,而不是
2018

我尝试完全复制您的数据帧:

>>> df.to_dict()
Out[99]: 
{'2019.': {0: 'FF.', 1: 'DD.'},
 'C1.': {0: 20.0, 1: 22.0},
 '2018.': {0: 'TT.', 1: 'JJ.'},
 'C2': {0: 70.0, 1: 66.0},
 2017: {0: 'HH.', 1: 'DD.'},
 'C3': {0: 88, 1: 99}}
将原始df分为两部分。然后使用
pd.melt()
重命名(轴=1)
,和
drop()

最后,我使用
pd.concat
reindex()
来获得所需的列顺序:

out = pd.concat([one,two],axis=1).reindex(['COL1.','C',''], axis=1)


使用
stack
Spark函数将数据拆分为行

val df=Seq( (“FF”,20,“TT”,70,“HH”,88), (“DD”,22,“JJ”,66,“DD”,99), ).toDF(“2019”、“C1”、“2018”、“C2”、“2017”、“C3”) df.createOrReplaceTempView(“df”) df.show val df1=spark.sql(“从df中选择2019年为2019年,`2019`,`C1`,2018年为2018年,`2018`,`C2`,2017年为2017年,`2017`,`C3`”) df1.createOrReplaceTempView(“df1”) df1.show sql(“从df1中选择堆栈(3,`2019`,`C1`,2019年,`2018年,`C2`,2018年,`2017`,`C3`,2017年)作为(`COL1`,`C`,`Year`”)。show //正在退出粘贴模式,现在正在解释。 +----+---+----+---+----+---+ |2019年| C1 | 2018年| C2 | 2017年| C3| +----+---+----+---+----+---+ |FF | 20 | TT | 70 | HH | 88| |DD | 22 | JJ | 66 | DD | 99| +----+---+----+---+----+---+ +--------+----+---+--------+----+---+--------+----+---+ |2019年| 2019年| C1年| 2018年| C2年| 2017年| C3年| +--------+----+---+--------+----+---+--------+----+---+ |2019年| FF | 20 | 2018年| TT | 70 | 2017年| HH | 88| |2019年| DD | 22 | 2018年| JJ | 66 | 2017年| DD | 99| +--------+----+---+--------+----+---+--------+----+---+ +----+---+----+ |1 | C |年| +----+---+----+ |2019年12月20日以后| |TT | 70 | 2018| |HH | 88 | 2017| |2019年12月22日| |JJ | 66 | 2018| |2017年第99日| +----+---+----+
我想用python,但无论如何都要感谢。它的语法与python非常相似,转换起来应该不会有问题。
out = pd.concat([one,two],axis=1).reindex(['COL1.','C',''], axis=1)
  COL1.     C        
0   FF.  20.0  2019.0
1   DD.  22.0  2019.0
2   TT.  70.0  2018.0
3   JJ.  66.0  2018.0
4   HH.  88.0    2017
5   DD.  99.0    2017
val df = Seq( ("FF", 20, "TT", 70, "HH", 88), ("DD", 22, "JJ", 66, "DD", 99), ).toDF("2019","C1","2018","C2","2017","C3") df.createOrReplaceTempView("df") df.show val df1 = spark.sql("SELECT 2019 as year2019, `2019`, `C1`, 2018 as year2018, `2018`, `C2`, 2017 as year2017, `2017`, `C3` from df") df1.createOrReplaceTempView("df1") df1.show spark.sql("SELECT stack(3, `2019`, `C1`, year2019, `2018`, `C2`, year2018, `2017`, `C3`, year2017) as (`COL1`, `C`, `Year`) from df1").show // Exiting paste mode, now interpreting. +----+---+----+---+----+---+ |2019| C1|2018| C2|2017| C3| +----+---+----+---+----+---+ | FF| 20| TT| 70| HH| 88| | DD| 22| JJ| 66| DD| 99| +----+---+----+---+----+---+ +--------+----+---+--------+----+---+--------+----+---+ |year2019|2019| C1|year2018|2018| C2|year2017|2017| C3| +--------+----+---+--------+----+---+--------+----+---+ | 2019| FF| 20| 2018| TT| 70| 2017| HH| 88| | 2019| DD| 22| 2018| JJ| 66| 2017| DD| 99| +--------+----+---+--------+----+---+--------+----+---+ +----+---+----+ |COL1| C|Year| +----+---+----+ | FF| 20|2019| | TT| 70|2018| | HH| 88|2017| | DD| 22|2019| | JJ| 66|2018| | DD| 99|2017| +----+---+----+