Назначить серию в DataFrame с помощью мультииндекс - PullRequest
0 голосов
/ 01 декабря 2018
df_a = pd.DataFrame(data = [[1,2,3], [1,2,3], [1,2,3], [1,2,3]], index = [['a', 'a', 'a', 'a'], ['b', 'b', 'b', 'b'] ], columns=['A', 'B', 'C'])

     A  B  C
a b  1  2  3
  b  1  2  3
  b  1  2  3
  b  1  2  3

И у меня есть Series:

df_b = pd.Series(data = [1,2,3, 4], index = [['a', 'a', 'a', 'a'], ['b', 'b1', 'b2', 'b3'] ])

a  b     1
   b1    2
   b2    3
   b3    4

Я пытаюсь назначить Series для DataFrame

    idx = df_a.index.intersection(df_b.index)
    df_a.loc[idx]['new_column'] = df_b.loc[idx]

Но я получаю:

     A  B  C
a b  1  2  3
  b  1  2  3
  b  1  2  3
  b  1  2  3

И я ожидаю получить:

     A  B  C new_column
a b  1  2  3   1
  b  1  2  3   1
  b  1  2  3   1
  b  1  2  3   1

Есть идеи, что не так?

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Назначение напрямую - это, вероятно, путь.Вы также можете использовать merge, если преобразуете серию в кадр данных:

>>> df_a.join(df_b.to_frame('new_column'))
     A  B  C  new_column
a b  1  2  3           1
  b  1  2  3           1
  b  1  2  3           1
  b  1  2  3           1
0 голосов
/ 01 декабря 2018

Просто назначьте напрямую.Назначение серий по умолчанию выравнивается по индексу:

df_a['new_column'] = df_b

print(df_a)

     A  B  C  new_column
a b  1  2  3           1
  b  1  2  3           1
  b  1  2  3           1
  b  1  2  3           1
...