РЕДАКТИРОВАТЬ
Я написал это сообщение, думая, что проблема была в merge()
или join()
, однако проблема была в результатах, полученных из groupby()
. Если вы нашли этот пост, есть изменение, что вы получаете ту же ошибку по той же причине. Поэтому я оставил заголовок без изменений.
Исходное сообщение
У меня есть два pandas кадра данных, каждый из которых содержит три столбца. Типы:
A: category
B: uint32
C: uint32
Я группирую их по первым двум столбцам и применяю функцию, например так:
df1 = df1.groupby(["A", "B"]).apply(my_function, meta={"Res_1":"uint32", "Res_2":"float32", "Res_3":"float32"})
df2 = df2.groupby(["A", "B"]).apply(my_function, meta={"Res_1":"uint32", "Res_2":"float32", "Res_3":"float32"})
Полученные два кадра данных имеют три столбца и составлен индекс двух слагаемых (первоначально столбцы A и B). Они выглядят так:
Res_1 Res_2 Res_3
A B
chrA01 1 0 0.000000 0.000000
5001 0 0.000000 0.000000
35001 2656 0.967225 21.346008
55001 261 1.000000 27.003832
chrC01 1 131 0.411950 8.610687
... ... ... ...
10001 0 0.000000 0.000000
chrA01 30001 1511 1.000000 25.416943
90001 1407 1.000000 25.073915
chrC01 30001 0 0.000000 0.000000
90001 0 0.000000 0.000000
Затем я хочу объединить их в один фрейм данных, используя объединение индексов df1
и df2
, поэтому я использую опцию how="outer"
on=["A", "B"]
.
df = pd.merge(df1, df2, how="outer", on=["A", "B"], validate="one_to_one")
Тем не менее, я получаю эту ошибку, так как я делаю validate="one_to_one"
:
pandas.errors.MergeError: Merge keys are not unique in either left or right dataset; not a one-to-one merge
Я знаю, что ключи должны быть уникальными, потому что я оценил генерацию двух кадры данных и их содержание.
Может, я неправильно делаю merge()
? Мой подозреваемый находится в пути, когда я указываю опцию on=...
. Можно ли указать on=index
, даже если это индекс с двумя терминами?