【发布时间】:2018-06-27 00:33:57
【问题描述】:
我一直在尝试以与 Excel“vlookup”类似的方式将两个 DataFrames 合并在一起(df 和 df_details),但得到了奇怪的结果。下面我展示了两个DataFrames的结构,为简单起见没有填充真实数据
df_details:
Abstract_Title | Abstract_URL | Session_No_v2 | Session_URL | Session_ID
-------------------------------------------------------------------------
Abstract_Title1 Abstract_URL1 1 Session_URL1 12345
Abstract_Title2 Abstract_URL2 1 Session_URL1 12345
Abstract_Title3 Abstract_URL3 1 Session_URL1 12345
Abstract_Title4 Abstract_URL4 2 Session_URL2 22222
Abstract_Title5 Abstract_URL5 2 Session_URL2 22222
Abstract_Title6 Abstract_URL6 3 Session_URL3 98765
Abstract_Title7 Abstract_URL7 3 Session_URL3 98765
df:
Session_Title | Session_URL | Sponsors | Type | Session_ID
-------------------------------------------------------------------------------
Session_Title1 Session_URL1 x, y z Paper 12345
Session_Title2 Session_URL2 x, y Presentation 22222
Session_Title3 Session_URL3 a, b ,c Presentation 98765
Session_Title4 Session_URL4 c Talk 12121
Session_Title5 Session_URL5 a, x Paper 33333
我想与Session_ID 合并,我希望最终的DataFrame 看起来像:
我已经尝试了以下脚本,它产生了一个DataFrame,它复制了(多次)某些行并做了一些奇怪的事情。例如,df_details 有 7,046 行,df 有 1,856 行 - 当我运行以下合并代码时,我的 final_df 会产生 21,148 行:
final_df = pd.merge(df_details, df, how = 'outer', on = 'Session_ID')
请帮忙!
【问题讨论】:
-
使用 Session_ID 检查您的 df 是否包含重复项?
-
它们确实包含重复 - 单个会话 ID 用于多个摘要。
-
例如 df_details 包含 3 12345 和 df 包含 2 12345,合并后你会看到 6
-
是的,我希望它被复制,因为其中一些对应的抽象信息是不同的。将其视为一个层次结构,其中会话是最高级别的,有些会话只有摘要,有些会话有多个。我有关于会议的信息和关于摘要的信息,我想将它们合并在一起。
标签: python python-3.x pandas join merge