在Pandas数据框中找到所有大于等于x的单元格值,并返回单元格值,列标题,行和相邻单元格值

时间:2019-03-22 12:16:57

标签: python pandas

我意识到这是一个漫长的询问,但是我已经尝试了好几天了,但都没有成功,并想知道是否有人会有想法。

考虑这样的电子表格:

        apple1  grape1  apple2  grape2  apple3  grape3
1          0       4     -0.2     2       0       4
2          0       4       0      6       0       3
3        -0.1      2       0      4       0       4
4        -0.5      5       0      6     -0.2      5
5        -0.4      4       0      5       0       2
6          0       6     -0.1     5       0       3

我想在数据框中搜索值小于-0.1的任何单元格,然后将值,列标题,行号和相邻值写出。

一开始,我可能会像以下内容一样简单:

Newlist()

if df >= -0.1:
   Newlist.append(cell.value)
   Newlist.append(row.value)
   Newlist.append(column.value)
   Newlist.append(cell.value.shift(1))

我完全意识到上述说法是没有道理的,但我希望它传达了我一直在尝试做的事情的想法。

接下来,我可以将df转换为列表并从那里工作(使用ifnot> = -0.1删除对象吗?),但这似乎不够优雅,而且远非理想。但是,如果有人可以使用它,我对此持开放态度。

如果我忽略了一个非常明显的问题,那么我一定已经看过有关此问题的所有堆栈交换问题,而没有道歉。

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,要过滤数据框,您可以像这样使用boolean indexing

df[df >= -0.1]

这样,所有不超过-0.1的数据都将显示为nan,然后可以使用Pandas.isnull()进行识别。

要获取所需数据的行和列,您可以使用df.to_numpy()将数据框转换为数组,并使用enumerate遍历行和列,以保留行/列的ID您当前正在遍历:

my_data = df[df >= -0.1].to_numpy()
for idrow, row in enumerate(my_data):
   for idcol, col in enumerate(row):
       if not pd.isnull(col):
           print("Value :"+str(col)+" column:"+str(idcol)+" row:"+str(idrow))

这将导致如下结果:

Value :0.0 column:0 row:0
Value :4.0 column:1 row:0
Value :2.0 column:3 row:0

您可以在循环中使用此名称来获取列名:

df.columns[idcol]

一旦获得这些ID,就可以通过直接访问来获取相邻的值。

my_data[x][y]

只需记住将一个条件设置为不访问不在数组中的值!