【问题标题】:Finding the location of series of text in series of another text在另一个文本系列中查找一系列文本的位置
【发布时间】:2018-12-27 19:24:34
【问题描述】:

我想在 ser2 C 列中搜索 ser1 A 列值,并在对应的 D 列文本中找到 B 列文本的位置。 ser2 是我正在查看的数据库,我想保存订单 ser1 但只是文本的位置。

ser1
A         B
"aa"    "xy"
"ac"    "ztb"
"aa"    "tx"
nan     "yzb"


ser2
C         D
"aa"     "txyzan"
"bc"     "axyz"
"ac"     "fyztb"

我尝试将 ser1 和 ser2 的索引更改为 A 和 C 列并在其中进行搜索,但有超过 1 个 nan 和“aa”值,所以我得到 TypeError: must be str, not Series。

y=[]


for x in ser1.A:
y.append(ser2.loc[x,"D"].find(ser1.loc[x,"B"]))

因此,我想获得一个类似 [1, 2, 0, nan] 的列表。因此,如果有人可以提供帮助,我会很高兴。
谢谢你。

【问题讨论】:

  • 欢迎来到 StackOverflow。请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 On topichow to ask... the perfect question 在此处申请。 StackOverflow 不是设计、编码、研究或教程资源。但是,如果您遵循您在网上找到的任何资源,进行诚实的编码尝试并遇到问题,那么您将有一个很好的示例可以发布。
  • 我添加了我的尝试,通常当我问的时候,我总是尝试,但它不是那么好,所以我没有添加。我没有明白我在这里做错了什么。

标签: python pandas search


【解决方案1】:

我不了解 pandas,而是使用基础 python 准备了解决方案。一个数据框ser1[["aa", "ac", "aa", ""],["xy", "ztb", "tx", "yzb"]]ser2 也会相应地发生变异。

假设 ser1 和 ser2 的所有列的行数相同:

y=list()
for x in range(len(ser1[0])):
    if ser1[0][x]=="": 
        y.append(float('nan'))
    else:
        y.append(ser2[1][ser2[0].index(ser1[0][x])].index(ser1[1][x]))

如果我没有误解你的话,这可能会解决你的问题。由于我使用了索引方法,因此代码将始终找到aa 的第一次出现。另请注意,您可以通过以下方式将数据框更改为列表列表:

ser1_list = ser1.values.tolist()

在上面的代码块之后,你可以通过以下方式转变成pandas的数据框:

result = pandas.DataFrame(y)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    相关资源
    最近更新 更多