【发布时间】:2021-04-23 01:29:02
【问题描述】:
我有这些 DF
df1
user_id code name code_equivalence name_equivalence
51 123 bi lovers 542 bi for marketing
51 123 bi lovers 545 i love bi
51 234 datascience 345 data and science
51 234 datascience 555 data lovers
51 255 antiquity history 429 roma
51 255 antiquity history 430 greece
52 123 bi lovers 542 bi for marketing
52 123 bi lovers 545 i love bi
52 256 modern history 500 france
52 256 modern history 501 germany
52 200 arts 400 arts I
52 200 arts 401 arts II
df2
user_id code name status
51 123 bi lovers ongoing
51 430 greece ongoing
52 501 germany ongoing
52 050 numbers ongoing
我想通过检查 df2 代码是否与 df1 代码或 df1 code_equivalence 相同并且 df2 名称与 df1 名称或 df1 name_equivalence 相同来合并它们以获得 df2 状态。 像这样:
合并df
user_id code name code_equivalence name_equivalence status
51 123 bi lovers 542 bi for marketing ongoing
51 123 bi lovers 545 i love bi ongoing
51 234 datascience 345 data and science (null)
51 234 datascience 555 data lovers (null)
51 255 antiquity history 429 roma (null)
51 255 antiquity history 430 greece ongoing
52 123 bi lovers 542 bi for marketing (null)
52 123 bi lovers 545 i love bi (null)
52 256 modern history 500 france (null)
52 256 modern history 501 germany ongoing
52 200 arts 400 arts I (null)
52 200 arts 401 arts II (null)
之后,我想将数据转换成一个新的df,如下所示:
最终结果
user_id code name code_equivalence name_equivalence status
51 123 bi lovers [542, 545] [bi for marketing, i love bi] ongoing
51 234 datascience [345, 555] [data and science, data lovers] (null)
51 255 antiquity history [429, 430] [roma, greece] ongoing
52 123 bi lovers [542, 545] [bi for marketing, i love bi] (null)
52 256 modern history [500, 501] [france, germany] ongoing
52 200 arts [400, 401] [arts I, arts II] (null)
谁能帮帮我?
【问题讨论】:
-
确实的要求,但是到目前为止您遇到了什么问题?
merge和groupby是您完成此任务所需的正确工具。 -
即使使用左连接,使用合并时我也会丢失 df1 唯一代码和名称
-
你能检查一下你的 merge_df 的第 5 行吗?基于 df1 和 df2 我不认为应该有一个匹配,所以它不应该是(空)在状态列?我的意思是代码 = 255 和 name_eq = roma 的行。
-
@Michał89 是的,你是对的。它是空的
标签: python pandas merge conditional-statements