【问题标题】:Compare 'name' columns of two different dataframes比较两个不同数据框的“名称”列
【发布时间】:2020-09-10 11:42:01
【问题描述】:
actual_df['new_col'] = np.where(lookup_df['name'].str.contains(actual_df['name'] + '-'), lookup_df['name'], 'Not Found')

以上代码抛出如下错误:

'Series' 对象是可变的,因此它们不能被散列

如何使用另一个数据框进行所需的查找?

【问题讨论】:

  • 请提供您尝试过的正确代码及其引发的错误回溯。还有您想要什么输出?
  • 谢谢,我提供了我尝试过的正确代码和错误。我需要在实际数据框中创建一个新列,方法是使用字符串查找服务器名称,其中包含来自查找数据框的方法。
  • 你想做什么?阅读您的代码,似乎就像您想查看名称存在于另一个 DataFrame 的系列中的位置,并添加了连字符 -
  • 是的,另一个数据框包含 name-*,所以我想将它拉到实际的数据框。基本上是从另一个数据框查找通配符。

标签: python pandas numpy dataframe lookup


【解决方案1】:

如果两列的长度相同,则使用切片代替“str.contains()”方法。

actual_df['new_col']= np.where(lookup_df['name'] == actual_df["name"].str[:-1], df2['name2'], 'Not Found')

如果没有,请使用 pandas 的“df.isin()”方法:

actual_df['new_col'] = actual_df["name"][actual_df["name"].isin(lookup_df["name"].str[:-1])]

【讨论】:

  • 谢谢,试过这个代码。它抛出“ValueError:只能比较相同标签的系列对象”
  • 这是因为,两列的长度不同。你能分享一下这两列的演示以及你想如何比较吗?
猜你喜欢
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 2017-01-01
  • 2021-01-17
  • 1970-01-01
相关资源
最近更新 更多