У меня есть pandas
DataFrame df
:
cit1 cgen1 cit2 cgen2 pair1 pair2
c1 male c25 female A B (+)
c2 female c25 female A B
c5 male c25 female A B
c5 male c26 male A B
c1 male c1 male A C (*)
c2 female c3 female A C
c1 male c13 male C D
c7 female c13 male C D
c8 male c17 female C D
c8 male c17 female E F
c12 male c17 female E F
...
(обратите внимание, что пустое пространство вставлено произвольно для удобства читателей)
Здесь для упрощения понимание, рассматривать cit1
и cgen1
как пару, cit2
и cgen2
как пару, а pair1
и pair2
как пару.
Мой желаемый результат DataFrame df2
выглядит следующим образом:
cit cgen pair1 pair2
c1 male A B (&)
c2 female A B
c5 male A B
c25 female A B (&&)
c26 male A B
c1 male A C
c2 female A C
c3 female A C
c1 male C D
c7 female C D
c8 male C D
c13 male C D
c17 female C D
c8 male E F
c12 male E F
c17 female E F
...
По сути, я хочу сформировать объединенные столбцы cit
и cgen
, объединив cit1
и cit2
(для cit
) и соответствующие cgen1
и cgen2
(для cgen
) на уникальную пару значений pair1
и pair2
.
Например, c1
и male
из cit1
и cgen1
в (+)
зарегистрированы как cit
и cgen
в (&)
.
c25
и female
из cit2
и cgen2
в (+)
зарегистрированы как cit
и cgen
в (&&)
.
Существуют также некоторые случаи, когда cit1 == cit2
для определенной пары, отображаемой (*)
.
Я пробовал разные функции, например pandas.merge()
, pandas.concat()
и pandas.groupby()
, но ничего такого emed производить то, что я собираюсь производить. (Я не обязательно буду писать здесь проверенные коды, поскольку все они приводят к бессмыслице. При необходимости я могу добавить это в комментарии по запросу.)
Любые идеи о том, как решить эту проблему, будут приветствоваться.