比较 Pandas 数据帧系列中的元素时出现问题

问题描述

我正在使用一个看起来像这样的 kaggle 数据集:

df1.head()

df2.head()

基本上这两个 dataframes df1df2 是从不同的文件中读取的,并且有一些共同的值。我想获取两个数据帧的 EssayText 列中相同值的索引。

现在我正在这样做:

[(True,i) for i,text in enumerate(df2['EssayText']) if text in df1['EssayText']]

但这不会返回任何输出,而我已经看到 df1df2 中至少前 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)]
,

我认为这比你想象的要简单.. 您可以像这样使用 ma​​sking 来获取 df1 和 df2 对“EssayText”列具有相同值的索引。

commonIndices = df1[df1['EssayText']==df2['EssayText']].index.to_list()

commonIndices = df2[df2['EssayText']==df1['EssayText']].index.to_list()

不管怎样,结果都是一样的