【问题标题】:Problem comparing elements in a Pandas dataframe Series比较 Pandas 数据框系列中的元素时出现问题
【发布时间】:2021-02-20 02:27:00
【问题描述】:

我正在使用如下所示的 kaggle 数据集:

df1.head()

df2.head()

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

现在我正在这样做:

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

但这不会返回任何输出,而我已经看到至少前 5 个值在 df1df2 中完全相同。

我也尝试了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

请帮助我理解我做错了什么。在此先感谢:)

【问题讨论】:

  • 请向我们提供代码以重新创建您的数据,例如df.to_dict()(根据需要截断)
  • 那是因为它正在比较以这种方式索引数据帧时返回的系列索引(我想)。所以在每个数据框索引的末尾使用.values,比如df1['key'].values

标签: python pandas dataframe series


【解决方案1】:

请尝试以下代码解决您提到的问题。

import pandas as pd

data1 = [[1,1,1,1,"A"],[2,1,1,1,"B"],[2,1,1,1,"C"],[2,1,1,1,"D"]]
data2 = [[2,1,1,2,"A"],[2,1,1,1,"B"],[2,1,1,1,"C"],[2,1,1,1,"E"]]
df1 = pd.DataFrame(data1,
                   columns=["Id","EssaySet","Score1","Score2","EssayText"])
df2 = pd.DataFrame(data2,
                   columns=["Id","EssaySet","Score1","Score2","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)]

【讨论】:

  • 感谢您的回答,但这对我来说似乎有点复杂。我的问题通过添加@Carafini 建议的.values 得到解决
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 2017-03-08
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多