Объединять / объединять DataFrames с разными индексами и разными именами столбцов - PullRequest
0 голосов
/ 18 января 2019

У меня проблемы с объединением двух фреймов данных желаемым способом. Я безуспешно пробовал многие методы merge и join, но не достиг желаемого результата.

import pandas as pd

d = {'A': [1, 1, 0, 1, 0, 1, 0],
     'B': [0, 0, 0, 0, 0, 1, 1]
     }
df = pd.DataFrame(data=d, index=["A", "B", "C", "D", "E", "F", "G"])
print(df)

d = {'A2': ["D", "A", "A", "B", "C", "C", "E", "X", "F", "G"],
     'B2': ["DD", "AA", "AA", "BB", "CC", "CC", "EE", "XX", "FF", "GG"],
     'C3': [1, 1, 11, 35, 53, 2, 76, 45, 5, 34]}


df2 = pd.DataFrame(data=d)
print(df2)

Выход на консоль:

   A  B
A  1  0
B  1  0
C  0  0
D  1  0
E  0  0
F  1  1
G  0  1

  A2  B2  C3
0  A  AA   1
1  A  AA  11
2  B  BB  35
3  C  CC  53
4  C  CC   2
5  E  EE  76
6  X  XX  45
7  F  FF   5
8  G  GG  34

Я ищу способ вычислить следующее: С помощью индекса df я могу посмотреть в столбце A2 из df2 значение B2, которое следует добавить к df.

Желаемый результат:

   A  B  B2
A  1  0  AA
B  1  0  BB
C  0  0  CC
D  1  0  DD
E  0  0  EE
F  1  1  FF
G  0  1  GG

(Это только фиктивные данные, просто дублируйте индекс и запишите его в столбец B2 из df недостаточно)

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Я знаю, что W-B уже очень элегантно ответил на это.

Однако, поскольку я потратил время на решение этой проблемы менее профессионально, позвольте мне также опубликовать свое решение.

От:

Я ищу способ вычислить следующее: через индекс df I можно посмотреть в столбце A2 df2 значение B2, которое следует добавить до дф.

Я понял, что должен сделать:

  1. получить форму списка индексов df. Итак, А, Б, С ...
  2. посмотрите значения в df2 ['B2'] в том же индексе, что и df2 ['A2'] для каждого элемента индекса df
  3. создайте новый столбец ['B2'] в df, куда мы копируем эти значения из df2 ['B2'], соответствующие индексу из df, к элементам в df2 ['A2']

Это мой код:

import pandas as pd

d = {'A': [1, 1, 0, 1, 0, 1, 0],
     'B': [0, 0, 0, 0, 0, 1, 1]
     }
df = pd.DataFrame(data=d, index=["A", "B", "C", "D", "E", "F", "G"])
print(df)

d = {'A2': ["D", "A", "A", "B", "C", "C", "E", "X", "F", "G"],
     'B2': ["DD", "AA", "AA", "BB", "CC", "CC", "EE", "XX", "FF", "GG"],
     'C3': [1, 1, 11, 35, 53, 2, 76, 45, 5, 34]}


df2 = pd.DataFrame(data=d)
print(df2)

llista=[]
for i in df.index:
    m=df2['A2'].loc[df2['A2']==i].index
    if m[0]:
        print m[0],i
        llista.append(df2['B2'].iloc[m[0]])
    else:
        llista.append([])
df['B2'] = llista

Вывод:

   A  B  B2
A  1  0  AA
B  1  0  BB
C  0  0  CC
D  1  0  []
E  0  0  EE
F  1  1  FF
G  0  1  GG

Как видите, отличается от принятого поста. Это потому, что в df2 нет индекса 'D' ['A2']

0 голосов
/ 18 января 2019

set_index и назначьте его

df['B2']=df2.drop_duplicates('A2').set_index('A2')['B2']
df
Out[728]: 
   A  B  B2
A  1  0  AA
B  1  0  BB
C  0  0  CC
D  1  0  DD
E  0  0  EE
F  1  1  FF
G  0  1  GG
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...