'реструктурировать' фрейм данных в python - PullRequest
1 голос
/ 05 августа 2020

Я перевожу некоторые операции по очистке данных, ранее сделанные в SPSS Modeler, на Python. В SPSS у вас есть «узел», который называется реструктуризацией. Я пытаюсь понять, как выполнить ту же операцию в Python, но я не могу понять, как этого добиться. Он объединяет каждое значение в столбце X со всеми значениями в разных столбцах A, B, C, et c ....

Итак, исходный фрейм данных выглядит так:

Code         Freq1    Freq2   
A01          1        7               
B02          0        6               
C03          17       8              

И после преобразования это должно выглядеть так:

Code         Freq1    Freq2    A01_Freq1  A01_Freq2  B02_Freq1   B02_Freq2    C03_Freq1   C03_Freq2
A01          1        7        1          7          Nan         Nan          Nan         Nan
B02          0        6        Nan        Nan        0           6            Nan         Nan
C03          17       8        Nan        Nan        Nan         Nan          17          8       

Я пробовал кое-что поворачивать, но я думаю, что это невозможно сделать за один шаг в Python ...

1 Ответ

1 голос
/ 05 августа 2020

Используйте DataFrame.set_index с DataFrame.unstack и DataFrame.sort_index для новых DataFrame с MultiIndex, затем сгладьте его на f-string s и последнее добавление к оригиналу DataFrame.join:

df1 = df.set_index('Code', append=True).unstack().sort_index(axis=1, level=1)
df1.columns = df1.columns.map(lambda x: f'{x[1]}_{x[0]}')

df = df.join(df1)
print (df)
  Code  Freq1  Freq2  A01_Freq1  A01_Freq2  B02_Freq1  B02_Freq2  C03_Freq1  \
0  A01      1      7        1.0        7.0        NaN        NaN        NaN   
1  B02      0      6        NaN        NaN        0.0        6.0        NaN   
2  C03     17      8        NaN        NaN        NaN        NaN       17.0   

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