【问题标题】:How do I get the index of a row in pandas if the row contains ALL items in a list?如果行包含列表中的所有项目,我如何获取熊猫行的索引?
【发布时间】:2018-09-14 07:26:22
【问题描述】:

我有一些结构并不总是相同的 excel 文件;所以我正在使用 headers=None 参数读取熊猫数据框。

然后我正在做一些检查以获取标题行索引位置。 在传递行索引之前,我有一个需要检查的必填列列表。

mandatory_cols = ['items','name','email']

我的数据框:

 0     NaN      NaN      NaN      NaN
 1     NaN      NaN      NaN      NaN
 2     NaN      NaN      NaN      NaN
 3     items    email    name     store
 4     2        test     Mike     2

我需要返回3,因为第 3 行包含我列表中包含的所有项目。如果缺少任何内容,则返回 None。

我查看了df.isin(mandatory_cols),但它似乎只返回一个布尔数据框,我似乎无法弄清楚如何只获取索引。

需要注意的是,文件中的列位置可能是乱序的,因此我需要能够通过此检查动态查看所有列。此外,该行可以包含的不仅仅是mandatory_cols,只要它具有我想要索引位置的所有必需列。

谢谢!

【问题讨论】:

    标签: python python-2.7 pandas numpy dataframe


    【解决方案1】:

    IIUC,你应该使用issubset,而不是isin

    df[[set(mandatory_cols).issubset(x) for x in df.values.tolist()]].index
    Out[1098]: Int64Index([3], dtype='int64')
    

    【讨论】:

    • 如果您不想列出所有 df 值(可能非常大),也可以使用applydf.apply(lambda k: set(mandatory_cols).issubset(k), 1)
    • @RafaelC 如果你测试速度,apply 比 for 循环慢
    • 但是它会使用尽可能多的内存吗?
    • @RafaelC 如果可以的话,你可以测试它:-) 并随时编辑时间回来:-)
    • 感谢您看到不同之处会很有趣!
    猜你喜欢
    • 2019-09-24
    • 1970-01-01
    • 2019-08-16
    • 2021-10-02
    • 1970-01-01
    • 2021-09-15
    • 2022-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多