Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.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_Pandas_Dataframe_Indexing - Fatal编程技术网

Python 从数据帧中提取符合条件的单元索引

Python 从数据帧中提取符合条件的单元索引,python,pandas,dataframe,indexing,Python,Pandas,Dataframe,Indexing,我在熊猫中有这样一个数据帧: a b c A 1 2 3 B 4 5 6 C 7 8 9 我想提取单元格值大于6的索引名和列名对 换句话说,我想获得 [["B","c"], ["C","a"], ["C","b"], ["C","c"]] 有什么聪明的方法可以做到这一点吗?您可以使用该方法将框架展平为一个系列,使用布尔索引选择所需的术语,最后将生成的索引转换为列表: s = df.stack() ii = s[s >= 6].index.tolist() 例如: >>

我在熊猫中有这样一个数据帧:

  a b c
A 1 2 3 
B 4 5 6
C 7 8 9
我想提取单元格值大于6的索引名和列名对

换句话说,我想获得

[["B","c"], ["C","a"], ["C","b"], ["C","c"]]
有什么聪明的方法可以做到这一点吗?

您可以使用该方法将框架展平为一个系列,使用布尔索引选择所需的术语,最后将生成的索引转换为列表:

s = df.stack()
ii = s[s >= 6].index.tolist()
例如:

>>> s = df.stack()
>>> s
A  a    1
   b    2
   c    3
B  a    4
   b    5
   c    6
C  a    7
   b    8
   c    9
dtype: int64
>>> s[s >= 6]
B  c    6
C  a    7
   b    8
   c    9
dtype: int64
>>> s[s >= 6].index
MultiIndex(levels=[[u'A', u'B', u'C'], [u'a', u'b', u'c']],
           labels=[[1, 2, 2, 2], [2, 0, 1, 2]])
>>> s[s >= 6].index.tolist()
[('B', 'c'), ('C', 'a'), ('C', 'b'), ('C', 'c')]

请注意,(1)我使用的是
=6
,因为这与您的示例相符,(2)这是一个严格意义上的元组列表,不是您要求的列表,但如果您真的想转换,您可以进行转换。

您可以采用NumPy路线并使用and

创建一个行和列标签数组,并使用
np.argwhere
返回给定条件所在的整数索引。使用
np。选择
检索相应的行和列索引标签:

>>> xy = np.column_stack((df.index, df.columns))
>>> np.choose(np.argwhere(df >= 6), xy)
array([['B', 'c'],
       ['C', 'a'],
       ['C', 'b'],
       ['C', 'c']], dtype=object)
这将返回一个数组:您可以使用
tolist()
返回Python列表:

>>> np.choose(np.argwhere(df >= 6), xy).tolist()
[['B', 'c'], ['C', 'a'], ['C', 'b'], ['C', 'c']]