У меня есть два кадра данных с перекрывающимися столбцами, но идентичные индексы, и я хочу объединить их.Я чувствую, что это должно быть прямо вперед, но я проработал ооочень много примеров и SO вопросов, и это не работает, но, похоже, не согласуется с другими примерами.
import pandas as pd
# create test data
df = pd.DataFrame({'gen1': [1, 0, 0, 1, 1], 'gen3': [1, 0, 0, 1, 0], 'gen4': [0, 1, 1, 0, 1]}, index = ['a', 'b', 'c', 'd', 'e'])
df1 = pd.DataFrame({'gen1': [1, 0, 0, 1, 1], 'gen2': [0, 1, 1, 1, 1], 'gen3': [1, 0, 0, 1, 0]}, index = ['a', 'b', 'c', 'd', 'e'])
In [1]: df
Out[1]:
gen1 gen2 gen3
a 1 0 1
b 0 1 0
c 0 1 0
d 1 1 1
e 1 1 0
In [2]: df1
Out[2]:
gen1 gen3 gen4
a 1 1 0
b 0 0 1
c 0 0 1
d 1 1 0
e 1 0 1
После проработки всех примеров здесь(https://pandas.pydata.org/pandas-docs/stable/merging.html) Я убежден, что нашел правильный пример (первый и второй пример слияний). Второй пример таков:
In [43]: result = pd.merge(left, right, on=['key1', 'key2'])
В их примере у них есть два DF(слева и справа), которые имеют перекрывающиеся столбцы и идентичные индексы, а их результирующий информационный кадр имеет одну версию каждого столбца и исходные индексы, но это не то, что происходит, когда я делаю это:
# get the intersection of columns (I need this to be general)
In [3]: column_intersection = list(set(df).intersection(set(df1))
In [4]: pd.merge(df, df1, on=column_intersection)
Out[4]:
gen1 gen2 gen3 gen4
0 1 0 1 0
1 1 0 1 0
2 1 1 1 0
3 1 1 1 0
4 0 1 0 1
5 0 1 0 1
6 0 1 0 1
7 0 1 0 1
8 1 1 0 1
Здесь мы видим, чтоСлияние не видел, что индексы одинаковы! Я возился с опциями, но не могу получить желаемый результат.
Здесь был задан похожий, но другой вопрос Как сохранить индекс при использовании пандобъединить но я не совсем понимаю ответы и поэтому не могу связать это с моей проблемой.
Поцелые числа для этого конкретного примера:
- Индекс всегда будет одинаковым.
- Столбцы с одинаковым именем всегда будут иметь одинаковые записи (т.е. они являются дубликатами).
Было бы замечательно иметь решение для этой конкретной проблемы, но я также очень хотел бы понять это, потому что время от времени трачу много времени на объединение фреймов данных.Я люблю панд, и в целом я нахожу это очень интуитивно понятным, но я просто не могу привыкнуть ни к чему, кроме тривиальных комбинаций информационных кадров.