Удалить столбец с тем же именем, используя индекс столбца в pyspark

Это мой фрейм данных. Я пытаюсь удалить повторяющиеся столбцы с тем же именем, используя индекс:

df = spark.createDataFrame([(1,2,3,4,5)],['c','b','a','a','b'])
df.show()

Выход:

+---+---+---+---+---+
|  c|  b|  a|  a|  b|
+---+---+---+---+---+
|  1|  2|  3|  4|  5|
+---+---+---+---+---+

Я получил индекс фрейма данных

col_dict = {x: col for x, col in enumerate(df.columns)}
col_dict

Выход:

{0: 'c', 1: 'b', 2: 'a', 3: 'a', 4: 'b'}

Теперь мне нужно удалить это повторяющееся имя столбца с тем же именем


person Ravali    schedule 18.12.2019    source источник


Ответы (1)


Не существует метода удаления столбцов с помощью индекса. Один из способов добиться этого — переименовать повторяющиеся столбцы, а затем удалить их.

Вот пример, который вы можете адаптировать:

df_cols = df.columns
# get index of the duplicate columns
duplicate_col_index = list(set([df_cols.index(c) for c in df_cols if df_cols.count(c) == 2]))

# rename by adding suffix '_duplicated'
for i in duplicate_col_index:
    df_cols[i] = df_cols[i] + '_duplicated'

# rename the column in DF
df = df.toDF(*df_cols)

# remove flagged columns
cols_to_remove = [c for c in df_cols if '_duplicated' in c]
df.drop(*cols_to_remove).show()

+---+---+---+
|  c|  a|  b|
+---+---+---+
|  1|  4|  5|
+---+---+---+
person blackbishop    schedule 18.12.2019