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|
+----+---+----+