Слой Panda DataFrame накладывается друг на друга - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть три DataFrames, как это:

groups:
    0   1   2   3
0   e   f   g   h
1   e   f   s   h
2   q   f   g   r
3   e   r   g   b

items:
    0   1   2   3
0   ret sef sdf fhs
1   hnf cbv awd øjg
2   gry bcr vbd dgf
3   xfh sjd krt qeb

weights:
    0   1   2   3
0   241 234 343 34
1   23  276 334 42
2   561 256 35  345
3   234 654 754 234

Я хочу, чтобы они накладывались друг на друга, чтобы получить MultiIndex с группами в качестве первого индекса, элементами в качестве второго и весами в качестве значений.Например.в 0,0 у меня есть "e" (первый индекс), "ret" (второй индекс) и 241 (значение), или в 2,3 у меня есть "g", "krt" и 754.

Как мне это сделать?Я хотел бы сделать это без перебора наборов данных и сделать это «способом Панды».

Это не то же самое, что вопрос Объединить несколько панд DataFrames в мультииндексный DataFrame потому что я хочу, чтобы это выглядело так:

e ret 241  <-- from 0,0 in each dataframe
  hnf 23   <-- from 0,1 in each dataframe
  xfh 234  <-- from 0,3 in each dataframe
q gry 561  <-- from 0,2 in each dataframe

и т. д. Это означает, что я помещаю кадры данных друг на друга и создаю трехмерный кадр данных, «просматривая их».

1 Ответ

0 голосов
/ 29 сентября 2018

Вы можете снять все ваши кадры данных, а затем использовать set_index.Я решил sort_values, чтобы все ваши соответствующие значения индекса были рядом друг с другом.


out = pd.concat([groups.unstack(), items.unstack(), weights.unstack()], 1)
out.sort_values(by=0).set_index([0, 1])

         2
0 1
b qeb  234
e ret  241
  hnf   23
  xfh  234
f sef  234
  cbv  276
  bcr  256
g sdf  343
  vbd   35
  krt  754
h fhs   34
  øjg   42
q gry  561
r sjd  654
  dgf  345
s awd  334
...