按条件获取Pandas Dataframe中的元素索引

时间:2018-01-18 02:45:59

标签: python pandas numpy dataframe

我有一个像这样的数据帧:

df = pd.DataFrame(columns=['A', 'B', 'C '], 
index=['D', 'E', 'F'], data = np.arange(0, 9, 1).reshape(3,3))

   A  B  C 
D  0  1  2
E  3  4  5
F  6  7  8

我需要的是提取所有元素的行和列索引,如果它们是小于4.它看起来很基本,但我不能这样做。

我想拥有的是,例如:

 {'D A': 0, 'D B':1,...}

1 个答案:

答案 0 :(得分:1)

首先将值大于或等于4的值掩盖为np.nan,然后使用stack方法,默认情况下会丢弃nan个值,现在如果提取索引,它将是你的索引需要:

df.where(df < 4).stack().index.values
# array([('D', 'A'), ('D', 'B'), ('D', 'C '), ('E', 'A')], dtype=object)

如果您还需要每对索引的值,您可以将其转换为字典:

df.where(df < 4).stack().to_dict()
# {('D', 'A'): 0.0, ('D', 'B'): 1.0, ('D', 'C '): 2.0, ('E', 'A'): 3.0}

其中df如下(突出显示小于4的值):

df.style.applymap(lambda x: 'color: %s' % 'red' if x < 4 else '')

enter image description here