Переиндексировать столбцы DataFrame по сериям меток - PullRequest
0 голосов
/ 29 июня 2018

У меня есть серия этикеток

pd.Series(['L1', 'L2', 'L3'], ['A', 'B', 'A'])

и датафрейм

pd.DataFrame([[1,2], [3,4]], ['I1', 'I2'], ['A', 'B'])

Я хотел бы иметь фрейм данных со столбцами ['L1', 'L2', 'L3'] с данными столбцов из 'A', 'B', 'A' соответственно. Вот так ...

pd.DataFrame([[1,2,1], [3,4,3]], ['I1', 'I2'], ['L1', 'L2', 'L3'])

в прекрасной манере панд.

Ответы [ 3 ]

0 голосов
/ 29 июня 2018

Так как вы упоминаете reindex

#s=pd.Series(['L1', 'L2', 'L3'], ['A', 'B', 'A'])
#df=pd.DataFrame([[1,2], [3,4]], ['I1', 'I2'], ['A', 'B'])
df.reindex(s.index,axis=1).rename(columns=s.to_dict())
Out[598]: 
    L3  L2  L3
I1   1   2   1
I2   3   4   3
0 голосов
/ 29 июня 2018

Вы можете использовать loc accessor:

s = pd.Series(['L1', 'L2', 'L3'], ['A', 'B', 'A'])
df = pd.DataFrame([[1,2], [3,4]], ['I1', 'I2'], ['A', 'B'])

res = df.loc[:, s.index]

print(res)

    A  B  A
I1  1  2  1
I2  3  4  3

или iloc аксессуар с columns.get_loc:

res = df.iloc[:, s.index.map(df.columns.get_loc)]

Оба метода позволяют получить доступ к дублирующим меткам / местоположениям в том же ключе, что и массивы NumPy.

0 голосов
/ 29 июня 2018

Будет создан описанный вами кадр данных:

import pandas as pd
import numpy as np

data = [['A','B','A','A','B','B'],
        ['B','B','B','A','B','B'],
        ['A','B','A','B','B','B']]

columns = ['L1', 'L2', 'L3', 'L4', 'L5', 'L6']

pd.DataFrame(data, columns = columns)
...