【问题标题】:Comparing two different sized pandas Dataframes and to find the row index with equal values比较两个不同大小的熊猫数据框并找到具有相等值的行索引
【发布时间】:2019-05-03 02:48:21
【问题描述】:

我需要一些帮助来比较两个 pandas 数据框

我有两个数据框

第一个数据帧是

df1 =
   a   b   c   d
0  1   1   1   1
1  0   1   0   1
2  0   0   0   1
3  1   1   1   1
4  1   0   1   0
5  1   1   1   0
6  0   0   1   0
7  0   1   0   1

第二个数据框是

df2 = 
   a   b   c   d
0  1   1   1   1
1  1   0   1   0
2  0   0   1   0

我想找到数据帧 1 (df1) 的行索引,它的整行与数据帧 2 (df2) 中的行相同。我的预期结果是

0
3
4
6

上面索引的顺序不需要按顺序,我要的是dataframe 1的索引(df1)

有没有不使用for循环的方法?

谢谢

汤米

【问题讨论】:

    标签: python-3.x pandas dataframe compare equals


    【解决方案1】:

    您可以使用merge

    df1.merge(df2,indicator=True,how='left').loc[lambda x : x['_merge']=='both'].index
    Out[459]: Int64Index([0, 3, 4, 6], dtype='int64')
    

    【讨论】:

    • 感谢您的快速回答。如果我的数据框 2 (df2) 的列名与数据框 1 (df1) 的列名不同,我可以问是否有另一种方法,比如说 [1 2 3 4] 而不是 [a b c d]
    • @TommyYip 重命名,如 df2.columns=df1.columns
    • 请问我是否使用 df1.drop([0]) 在不重置索引的情况下删除 df1 数据帧的第一行(df1 的第一行索引为 1 而不是 0)。有没有办法将 df2 与 df1 进行比较并获得索引 [3 4 6] 的输出。如果我使用您在上面提供的代码,我会得到 [2 3 5] 的输出。它会自动重置 df1 的索引。请你帮帮我。
    • @TommyYip 同时重置 df1 或 df2 的索引,并通过 ['index'] 获取索引
    猜你喜欢
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 2018-07-17
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    相关资源
    最近更新 更多