Разблокировка панды данных - PullRequest
0 голосов
/ 11 октября 2018

Предположим, у меня есть фрейм данных с двумя столбцами с именем 'column' и 'value', который выглядит следующим образом:

Фрейм данных 1:

                   column  value
0                  column1     1
1                  column2     1
2                  column3     1
3                  column4     1
4                  column5     2
5                  column6     1
6                  column7     1
7                  column8     1
8                  column9     8
9                  column10    2
10                 column1     1
11                 column2     1
12                 column3     1
13                 column4     3
14                 column5     2
15                 column6     1
16                 column7     1
17                 column8     1
18                 column9     1
19                 column10    2
20                 column1     5
..                      ...   ...

Я хочучтобы преобразовать этот фрейм данных так, чтобы он выглядел так:

Фрейм данных 2:

    column1 column2 column3 column4 column5 column6 column7 column8 column9 column10
    0       1      1       1       1       2       1       1       1        8      2
    1       1      1       1       3       2       1       1       1        1      2
    2       5      ..      ..      ..      ..      ..      ..      ..       ..     ..
    ..      ..     ..      ..      ..      ..      ..      ..      ..       ..     ..

Теперь я знаю, как это сделать наоборот.Если у вас есть фрейм данных с именем df, который выглядит как фрейм данных 2 , вы можете сложить его с помощью следующего кода:

df = (df.stack().reset_index(level=0, drop=True).rename_axis(['column']).reset_index(name='value'))

К сожалению, я не знаю, как вернуться назад!

Вопрос: Как мне манипулировать dataframe 1 (снять его, если это слово), чтобы он выглядел как dataframe 2 ?

1 Ответ

0 голосов
/ 11 октября 2018

Создать MultiIndex с помощью set_index со счетчиком Series с помощью cumcount и изменить его на unstack:

g = df.groupby('column').cumcount()
df1 = df.set_index([g, 'column'])['value'].unstack(fill_value=0)
print (df1)
column  column1  column10  column2  column3  column4  column5  column6  \
0             1         2        1        1        1        2        1   
1             1         2        1        1        3        2        1   
2             5         0        0        0        0        0        0   

column  column7  column8  column9  
0             1        1        8  
1             1        1        1  
2             0        0        0  

В последнем случае, если требуется сортировка по числовому значению имен столбцов, используйте extract для целых чисел, конвертируйте их и получайте позиции столбцов по argsort - последний порядок по iloc:

df1 = df1.iloc[:, df1.columns.str.extract('(\d+)', expand=False).astype(int).argsort()]
print (df1)
column  column1  column2  column3  column4  column5  column6  column7  \
0             1        1        1        1        2        1        1   
1             1        1        1        3        2        1        1   
2             5        0        0        0        0        0        0   

column  column8  column9  column10  
0             1        8         2  
1             1        1         2  
2             0        0         0 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...