下面的代码遍历Pandas DataFrame的每个成员,询问该项的绝对值是否> = 0.5,如果是,则将其值与相应的列名和行名一起附加到列表中:
record = []
for i in range(df.shape[0]):
for j in range(df.shape[1]):
if abs(df.iloc[i, j]) >= 0.5:
record.append([df.columns[j], df.index[i], df.iloc[i, j]])
当然,这可能需要一些时间,具体取决于数据帧的大小,因为执行这些嵌套循环的效率很低...
是否有更好,更快,更Python化的方法来做到这一点?
样本输入:
colA colB colC colD
row1 -0.7 0.3 0.6 -0.2
row2 0.4 -0.3 0.8 -0.9
示例输出:
[['colA', 'row1', -0.7],
['colC', 'row1', 0.6],
['colC', 'row2', 0.8],
['colD', 'row2', -0.9]]
答案 0 :(得分:0)
这是mask
整个df值然后是stack
的一种方法
df.where(df.abs()>0.5).stack().reset_index().values.tolist()
答案 1 :(得分:-1)
使用numpy。使用以下命令将pandas数据框的值转换为numpy:
_DeviceAttributes(/job:localhost/replica:0/task:0/device:CPU:0, CPU, 268435456, 10588614393916958794)
_DeviceAttributes(/job:localhost/replica:0/task:0/device:XLA_GPU:0, XLA_GPU, 17179869184, 12320120782636586575)
_DeviceAttributes(/job:localhost/replica:0/task:0/device:XLA_CPU:0, XLA_CPU, 17179869184, 13378821206986992411)
_DeviceAttributes(/job:localhost/replica:0/task:0/device:GPU:0, GPU, 32039954023, 12481654498215526877)
1.14.0
对于有数据,我首先随机生成它们,然后选择大于0.5的数据:
<ResourceDictionary Source="ImageList16x16.xaml" />