Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果一行包含列表中的所有项,如何获取该行的索引?_Python_Python 2.7_Pandas_Numpy_Dataframe - Fatal编程技术网

Python 如果一行包含列表中的所有项,如何获取该行的索引?

Python 如果一行包含列表中的所有项,如何获取该行的索引?,python,python-2.7,pandas,numpy,dataframe,Python,Python 2.7,Pandas,Numpy,Dataframe,我有一些excel文件,它们的结构并不总是相同的;因此,我正在读取带有headers=None参数的pandas数据帧 然后我做了一些检查以获得标题行索引位置。 在传递行索引之前,我有一个必须检查的列列表 mandatory\u cols=['items','name','email'] 我的数据帧: 0 NaN NaN NaN NaN 1 NaN NaN NaN NaN 2 NaN NaN

我有一些excel文件,它们的结构并不总是相同的;因此,我正在读取带有headers=None参数的pandas数据帧

然后我做了一些检查以获得标题行索引位置。 在传递行索引之前,我有一个必须检查的列列表

mandatory\u 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(必填项)
,但它似乎只返回布尔值的数据帧,我似乎不知道如何只获取索引

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


谢谢

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

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

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

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

如果您不想列出所有df值(可能非常大),也可以使用
apply
df.apply(lambda k:set(强制)。issubset(k),1)
@RafaelC如果您测试速度,apply比for Loop慢,但它会使用同样多的内存吗?@RafaelC如果可以,您可以测试它:-)并可以自由编辑时间返回:-)谢谢,看到差异会很有趣!如果您不想列出所有df值(可能非常大),也可以使用
apply
df.apply(lambda k:set(强制)。issubset(k),1)
@RafaelC如果您测试速度,apply比for Loop慢,但它会使用同样多的内存吗?@RafaelC如果可以,您可以测试它:-)并可以自由编辑时间返回:-)谢谢,看到差异会很有趣!