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']]