Pandas: Как мне вставить столбцы DataFrame в другой столбец с результирующим MultiIndex? - PullRequest
0 голосов
/ 16 июня 2020

Я получил следующую структуру данных для объекта 1:

dayofweek  A  B  C
Monday     1  2  3
Tuesday    4  5  6

Все эти элементы A, B, C я получил для других объектов, скажем, Obj1. Obj2, Obj3.

Я хочу поместить всю дату в один фрейм данных со структурой столбцов MultiIndex:

object        Obj1      Obj2      Obj3
dayofweek  A  B  C   A  B  C   A  B  C
Monday     1  2  3   2  1  3   3  2  1
Tuesday    4  5  6   5  4  6   6  5  4

Как мне это легко сделать? Я пробовал использовать .unstack(), но он помещает метку объектов ниже A, B, C столбцов

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

Используйте concat с параметром keys для MultiIndex с rename столбцами:

df = df.set_index('dayofweek')
df1 = df.rename(columns={'A':'B', 'B':'A'}).sort_index(axis=1)
df2 = df.rename(columns={'A':'C', 'C':'A'}).sort_index(axis=1)

df3 = pd.concat([df, df1, df2], keys=('Obj1','Obj2','Obj3'), axis=1)
print (df3)

          Obj1       Obj2       Obj3      
             A  B  C    A  B  C    A  B  C
dayofweek                                 
Monday       1  2  3    2  1  3    3  2  1
Tuesday      4  5  6    5  4  6    6  5  4

Если есть 3 DataFrames с dayofweek столбцом, используйте:

dfs = [df, df1, df2]
df3 = pd.concat([x.set_index('dayofweek') for x in dfs], keys=('Obj1','Obj2','Obj3'), axis=1)
print (df3)
0 голосов
/ 16 июня 2020

Попробуйте использовать слияние:

print(obj1.merge(obj2, on='dayofweek').merge(obj3, on='dayofweek'))

результат:

  dayofweek  A_x  B_x  C_x  A_y  B_y  C_y  A  B  C
0    Monday    1    2    3    2    1    3  3  2  1
1   Tuesday    4    5    6    5    4    6  6  5  4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...