【问题标题】:Matching Pandas DataFrame Column Values with another DataFrame Column将 Pandas DataFrame 列值与另一个 DataFrame 列匹配
【发布时间】:2018-12-05 16:11:07
【问题描述】:
country = []
for i in df_temp['Customer Name'].iloc[:]:
    if i in gui_broker['EXACT_DDI_CUSTOMER_NAME'].tolist():
        country.append(gui_broker["Book"].values[gui_broker['EXACT_DDI_CUSTOMER_NAME'].tolist().index(i)])
    else:
        country.append("No Book Defined")
df_temp["Country"] = country

我目前有一个带有一列(“客户名称”)的大型 DataFrame (df_temp),并且正在尝试将它与一个具有 3 列的小型 DataFrame (gui_broker) 匹配 - 其中之一具有大型 DataFrame 的所有唯一值('EXACT_DDI_CUSTOMER_NAME')。

匹配 df_temp 的值行后,我想根据匹配在 df_temp 中创建一个新列,其中包含我的小 DataFrame (gui_broker) 的值“Book”。我尝试了每一个 apply lambda 方法,但我一无所知。上面提供的代码为我提供了一个解决方案,但它很慢而且不像 Pandas...

我该如何进行?

【问题讨论】:

标签: python pandas numpy dataframe


【解决方案1】:

您可以使用 pandas 合并来做到这一点。像这样……

df_temp = df_temp.merge(gui_broker[['EXACT_DDI_CUSTOMER_NAME','Book']], left_on='Customer Name', right_on='EXACT_DDI_CUSTOMER_NAME', how='left' )
df_temp['Book'] = df_temp['Book'].fillna('No Book Defined')

【讨论】:

    【解决方案2】:

    看起来您正在寻找join(文档是here) 它通过将第一个中的选定列与第二个中的索引匹配来将 DataFrame 与另一个连接。

    所以

    df_temp.join(gui_broker
                 .set_index("EXACT_DDI_CUSTOMER_NAME")
                 .loc[:, ["Book"]],
                 on="Customer Name")
    

    【讨论】:

      【解决方案3】:

      我认为应该这样做,使用mapgui_brokerBook 列通过EXACT_DDI_CUSTOMER_NAME 映射到Custome Name 中的df_tmp,:

      df_tmp['Country'] = (df_tmp['Customer Name']
                           .map(gui_broker.set_index('EXACT_DDI_CUSTOMER_NAME').Book)
                           .fillna('No Book Defined'))
      

      虽然我需要一些示例数据来测试它!

      【讨论】:

      • 谢谢。我试过这样做,但我得到 InvalidIndexError: Reindexing only valid with uniquely valueed Index 对象。 df_tmp['Customer Name'] 有许多非唯一行。 gui_broker('EXACT_DDI_CUSTOMER_NAME') 但是只有一个。
      • 如果您遇到该错误,我认为 gui_broker 实际上 确实 有非唯一行,在这种情况下您可以删除该行的重复项一个第一。 df_tmp 是否有重复并不重要,只有映射系列中的重复才重要。如果是这种情况,请在之前使用gui_broker.drop_duplicates(subset='EXACT_DDI_CUSTOMER_NAME',inplace=True)
      • 尝试使用虚拟数据帧,当gui_broker 中有重复项时,我会收到该错误消息,否则不会
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 2012-10-15
      • 2022-01-26
      • 2022-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多