如何用Pysp中映射表中的值重命名DataFrame头

2024-05-28 23:21:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须用Pyspark中映射表(下面的df2)中的值重命名table()的列。你知道吗

谢谢你的帮助!你知道吗

我试着用熊猫做,但用我的桌子做了25分钟

import pandas as pd
df = pd.DataFrame({'kod':[1,1,3,4,5], 'freq':[4,8,8,20,16], 'lsv':[100,200,300,250,400]}) 

df2 = pd.DataFrame({'oldid':['kod','freq','lsv'], 'newid':['code','visits','volume']}) 

mapping=dict(df2[['oldid', 'newid']].values) 
df=df.rename(columns=mapping)  

display(df2)

Tags: importdataframedftablemappingpyspark重命名pd
1条回答
网友
1楼 · 发布于 2024-05-28 23:21:02

Spark Dataframes works little differently than Pandas data frame after converting your pandas dataframes into Spark data frames

我将freq的名称更新为zeq,只是为了演示排序

df = spark.createDataFrame([(4,1,100),(8,1,200),(8,3,300),(20,4,250),(16,5,400)], ['zeq','kod','lsv'])                
sorted_df = df.select(sorted(df.columns))
sorted_df.show()

+ -+ -+ -+
|kod|lsv|zeq|
+ -+ -+ -+
|  1|100|  4|
|  1|200|  8|
|  3|300|  8|
|  4|250| 20|
|  5|400| 16|
+ -+ -+ -+

header dataFrame

headers = spark.createDataFrame([('code','kod'),('visits','zeq'),('volume','lsv')],['newid','oldid'])
headers.show()
+   +  -+
| newid|oldid|
+   +  -+
|  code|  kod|
|visits|  zeq|
|volume|  lsv|
+   +  -+

Spark dataframe上有一个名为toDF的方法,它将新的头列列表作为参数,并更新dataframe的头。你知道吗

so sort your data frame based on oldid and select new id and convert that column values into list like below

sorted_headers_list = headers.sort('oldid').select('newid').rdd.flatMap(lambda x: x).collect()

update your dataframe with new headers

df_with_updated_headers = sorted_df.toDF(*sorted_headers_list)

df_with_updated_headers.show()
+  +   +   +
|code|volume|visits|
+  +   +   +
|   1|   100|     4|
|   1|   200|     8|
|   3|   300|     8|
|   4|   250|    20|
|   5|   400|    16|
+  +   +   +

如果你需要更多的细节,请告诉我

相关问题 更多 >

    热门问题