问题描述
df1.head()
df2.head()
基本上这两个 dataframes
df1
和 df2
是从不同的文件中读取的,并且有一些共同的值。我想获取两个数据帧的 EssayText
列中相同值的索引。
现在我正在这样做:
[(True,i) for i,text in enumerate(df2['EssayText']) if text in df1['EssayText']]
但这不会返回任何输出,而我已经看到 df1
和 df2
中至少前 5 个值完全相同。
我也试过 df1['EssayText'][0] in df2['EssayText']
并且令人惊讶地返回 False
。我似乎不明白原因。
另一方面,如果我执行以下操作:
df1.iloc[3] == df2.iloc[3]
我得到的输出是
Id True
EssaySet True
score1 True
score2 True
EssayText True
Name: 3,dtype: bool
请帮助我理解我做错了什么。提前致谢:)
解决方法
请针对您提到的问题尝试以下代码。
import pandas as pd
data1 = [[1,1,"A"],[2,"B"],"C"],"D"]]
data2 = [[2,2,"E"]]
df1 = pd.DataFrame(data1,columns=["Id","EssaySet","Score1","Score2","EssayText"])
df2 = pd.DataFrame(data2,"EssayText"])
l_match = []
for index,rowdf1 in df1.iterrows():
indexdf1 = int(index)
for index,rowdf2 in df2.iterrows():
indexdf2 = int(index)
if (rowdf1["EssayText"] == rowdf2["EssayText"]):
l_match.append((indexdf1,indexdf2))
print(l_match)
输出:
[(0,0),(1,1),(2,2)]
,
我认为这比你想象的要简单.. 您可以像这样使用 masking 来获取 df1 和 df2 对“EssayText”列具有相同值的索引。
commonIndices = df1[df1['EssayText']==df2['EssayText']].index.to_list()
或
commonIndices = df2[df2['EssayText']==df1['EssayText']].index.to_list()
不管怎样,结果都是一样的