【问题标题】:Split column and append to existing column Pyspark [duplicate]拆分列并附加到现有列 Pyspark [重复]
【发布时间】:2022-01-26 07:02:03
【问题描述】:

我有一个像这样的数据框我想根据分隔符拆分列值并使用 PySpark 将其附加到同一列

输入:

--------------------------
| Name          | Country |
|-------------------------|
| A;B;C         |  USA    |
| X;Y           |  IND    |
| W;D;F;G       |  UK     |
| H             |  IND    |
| J;K;L;S;I;O   |  USA    |
---------------------------

预期输出:

 ----------------
|Name|  Country |
|---------------|
|A   |    USA   |
|B   |    USA   |
|C   |    USA   |
|X   |    IND   |
|Y   |    IND   |
|W   |    UK    |
|D   |    UK    |
|F   |    UK    |
|G   |    UK    |
|H   |    IND   |
|J   |    USA   |
|K   |    USA   |
|L   |    USA   |
|S   |    USA   |
|I   |    USA   |
|O   |    USA   |
-----------------

【问题讨论】:

标签: python pandas pyspark


【解决方案1】:

以下代码是拆分列值和创建新行的示例

from pandas import DataFrame

df = DataFrame([{'Name': 'a;b;c', 'Country': 1},
               {'Name': 'd;e;f', 'Country': 2}])
new_df = DataFrame(df.Name.str.split(';').tolist(), df.Country).stack()
new_df = new_df.reset_index([0, 'Country'])
new_df.columns = ['Country', 'Name']

【讨论】:

    【解决方案2】:

    使用split 将字符串拆分为;。然后使用explode 可以将数组中的每个元素转换为行。

    from pyspark.sql import functions as F
    
    data = [("A;B;C", "USA",),
            ("X;Y", "IND",),
            ("W;D;F;G", "UK",),
            ("H", "IND",),
            ("J;K;L;S;I;O", "USA",), ]
    df = spark.createDataFrame(data, ("Name", "Country",))
    
    df.withColumn("Name", F.explode(F.split(F.col("Name"), ";"))).show()
    

    输出

    +----+-------+
    |Name|Country|
    +----+-------+
    |   A|    USA|
    |   B|    USA|
    |   C|    USA|
    |   X|    IND|
    |   Y|    IND|
    |   W|     UK|
    |   D|     UK|
    |   F|     UK|
    |   G|     UK|
    |   H|    IND|
    |   J|    USA|
    |   K|    USA|
    |   L|    USA|
    |   S|    USA|
    |   I|    USA|
    |   O|    USA|
    +----+-------+
    

    【讨论】:

      猜你喜欢
      • 2020-09-14
      • 1970-01-01
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 2017-08-29
      • 2016-08-15
      • 1970-01-01
      相关资源
      最近更新 更多