假设我有一个带数值的数据框。
如何在特定阈值以下找到\ _以上单元格的所有索引(“row”+“col”+“Value”)?
例如:
df = pd.DataFrame([[1,2,3],[4,5,6]], columns=['a', 'b', 'c'])
我的门槛是2 我想得到:
[[0,c,3],[1,a,4][1,b,5],[1,c,6]]
答案 0 :(得分:2)
使用stack
进行重塑,按MultiIndex
创建列,按query
过滤,最后转换为nested list
:
c = df.stack().reset_index(name='val').query('val > 2').values.tolist()
print (c)
[[0, 'c', 3], [1, 'a', 4], [1, 'b', 5], [1, 'c', 6]]
提高性能的另一个愚蠢的解决方案:
#create numpy array
arr = df.values
#create boolean mask
m = arr > 2
#get positions ot True values
a = np.where(m)
#filter values to 1d array by mask
b = arr.ravel()[m.ravel()]
#final list by indexinf columns and index values, map for convert nested tuples
c = list(map(list, zip(df.index[a[0]], df.columns[a[1]], b)))
print (c)
[[0, 'c', 3], [1, 'a', 4], [1, 'b', 5], [1, 'c', 6]]
答案 1 :(得分:0)
您可以使用:
df[df.gt(2)].stack().reset_index().values.tolist()
输出:
[[0, 'c', 3.0], [1, 'a', 4.0], [1, 'b', 5.0], [1, 'c', 6.0]]