我有一个像这样的数据帧:
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,...}
答案 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 '')