Панды объединяются в мультииндекс - PullRequest
0 голосов
/ 02 мая 2018

У меня есть пять DataFrames с одинаковыми именами индекса и столбца, и я хочу объединить их в один DataFrame с мультииндексом с предыдущим индексом и именами столбцов, и новые имена столбцов будут ['A', ' B ',' C ',' D ',' E '], то есть имя фреймов данных.

(Я хочу сделать это, чтобы экспортировать его как массив np.ar с 5 столбцами и множеством строк, я говорю вам об этом, потому что, возможно, есть лучший способ для этого.)

Спасибо !!

РЕДАКТИРОВАТЬ: Я постараюсь объяснить более четко: скажем, мы получили только два df:

df1 = AA
    X   Y   Z
0   x0  y0  z0
1   x1  y1  z1
2   x2  y2  z2

df2 = BB
    X   Y   Z
0   x00 y00 z00
1   x11 y11 z11
2   x22 y22 z22

что я хочу это:

dfAll
        AA  BB
X   0   x0  x00
    1   x1  x11
    2   x2  x22
Y   0   y0  y00
    1   y1  y11
    2   y2  y22
Z   0   z0  z00
    1   z1  z11
    2   z2  z22

РЕДАКТИРОВАТЬ 2: Мне удалось сделать это с

df1 = df1.stack()
df2 = df2.stack()
dfALL = pd.concat([df1, df2], axis=1)

Спасибо за подсказки, это помогает мне думать.

1 Ответ

0 голосов
/ 02 мая 2018

Используйте concat с параметром keys для Multiindex:

np.random.seed(234)

df1 = pd.DataFrame(np.random.randint(10, size=(3,3)), columns=list('ABC'))
df2 = pd.DataFrame(np.random.randint(10, size=(3,3)), columns=list('ABC'))
df3 = pd.DataFrame(np.random.randint(10, size=(3,3)), columns=list('ABC'))
df4 = pd.DataFrame(np.random.randint(10, size=(3,3)), columns=list('ABC'))
df5 = pd.DataFrame(np.random.randint(10, size=(3,3)), columns=list('ABC'))

df = pd.concat([df1, df2, df3, df4, df5], keys=['A', 'B' , 'C', 'D', 'E'])
print (df)
     A  B  C
A 0  8  4  9
  1  1  3  7
  2  6  3  0
B 0  3  3  2
  1  6  8  9
  2  3  7  5
C 0  7  4  0
  1  0  7  5
  2  7  3  9
D 0  3  9  3
  1  3  4  4
  2  8  5  7
E 0  2  7  4
  1  9  3  9
  2  8  9  7

Если хотите вывести 2d array, используйте numpy.concatenate:

arr = np.concatenate([df1.values, df2.values, df3.values, df4.values, df5.values])
print (arr)
[[8 4 9]
 [1 3 7]
 [6 3 0]
 [3 3 2]
 [6 8 9]
 [3 7 5]
 [7 4 0]
 [0 7 5]
 [7 3 9]
 [3 9 3]
 [3 4 4]
 [8 5 7]
 [2 7 4]
 [9 3 9]
 [8 9 7]]

EDIT: немного улучшено ваше решение с параметром keys:

dfALL = pd.concat([df1.stack(), df2.stack()], axis=1, keys=('AA', 'BB'))
print (dfALL)
     AA   BB
0 X  x0  x00
  Y  y0  y00
  Z  z0  z00
1 X  x1  x11
  Y  y1  y11
  Z  z1  z11
2 X  x2  x22
  Y  y2  y22
  Z  z2  z22
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...