将Panda DataFrame彼此叠加

时间:2018-09-29 08:27:13

标签: python pandas dataframe multi-index

我有三个这样的DataFrame:

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。

我该如何完成?我想做到这一点而无需遍历数据集,而是以“熊猫方式”进行。

这与问题Combine multiple pandas DataFrames into a multi-index 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 :(得分:1)

您可以取消堆叠所有DataFrame,然后使用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