我想在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:必须是str,而不是Series。
y=[]
for x in ser1.A:
y.append(ser2.loc[x,"D"].find(ser1.loc[x,"B"]))
因此,我想获得一个类似[1、2、0,nan]的列表。因此,如果有人可以提供帮助,我会很高兴。
谢谢。
答案 0 :(得分:1)
我不了解熊猫,相反,我使用基本的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()
在上面的代码块之后,您可以通过以下方式将其重新排列为熊猫的数据框:
result = pandas.DataFrame(y)