pyspark, как развернуть csv с двумя строками заголовка - PullRequest
0 голосов
/ 03 августа 2020

Как я могу использовать pyspark или pandas для достижения указанного ниже преобразования? Большое спасибо. Исходный файл - csv со следующей информацией:

enter image description here

expected:

введите описание изображения здесь

1 Ответ

0 голосов
/ 03 августа 2020

Я предполагаю, что ваш исходный CSV-файл выглядит следующим образом:

 ,Group_1,Group_2
 ,Sub_Group_1,Sub_Group_1
Maturity,7/31/20,7/31/20
0.1,0.2,0.3
0.2,0.3,0.4

Обратите внимание, что:

  • есть начальные пробелы в первых 2 строках ( имена 2 верхних уровней MultiIndex для первого столбца), иначе read_csv даст им Безымянный ... имена по умолчанию,
  • на самом деле есть 3 Уровни MultiIndex в столбцах (третий уровень содержит даты).

Я прочитал их, позвонив по номеру df = pd.read_csv('Input.csv', header=[0,1,2]), а содержимое:

               Group_1     Group_2
           Sub_Group_1 Sub_Group_1
  Maturity     7/31/20     7/31/20
0      0.1         0.2         0.3
1      0.2         0.3         0.4

(вы должны были включить его вместо изображения).

Первый шаг: расплавить :

result = pd.melt(df, id_vars=[(' ', ' ', 'Maturity')],
    var_name=['Group_Name', 'Sub_Group_Name', 'Date'])

Обратите внимание, что в приведенном выше коде я указал id_vars как кортеж , с двумя верхними элементами в качестве пробелов (вот почему я сделал предположение о начальных пробелах).

Результат:

   ( ,  , Maturity) Group_Name Sub_Group_Name     Date  value
0               0.1    Group_1    Sub_Group_1  7/31/20    0.2
1               0.2    Group_1    Sub_Group_1  7/31/20    0.3
2               0.1    Group_2    Sub_Group_1  7/31/20    0.3
3               0.2    Group_2    Sub_Group_1  7/31/20    0.4

И единственное нужно переименовать первый столбец:

result.rename(columns={result.columns[0]: 'Maturity'}, inplace=True)

Теперь, когда вы распечатываете результат, вы получите:

   Maturity Group_Name Sub_Group_Name     Date  value
0       0.1    Group_1    Sub_Group_1  7/31/20    0.2
1       0.2    Group_1    Sub_Group_1  7/31/20    0.3
2       0.1    Group_2    Sub_Group_1  7/31/20    0.3
3       0.2    Group_2    Sub_Group_1  7/31/20    0.4

Порядок строк немного отличается erent, но так работает расплав . Если вас не устраивает эта деталь, измените порядок строк в соответствии с вашими потребностями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...