返回DataFrame[Pandas]中数据组的位置(行和列)

大家早上好。我正在使用 Pandas,我有以下 DataFrame:

import pandas as pd

df = pd.DataFrame([[90.0,10.0,10.0,20.0,10.0], [30.0,30.0,20.0,70.0,20.0], [30.0,20.0,10.0,20.0,10.0], [20.0,10.0,80.0,10.0,0.0]], index=['v_12','v_23','v_34','v_15'], columns=['C_1','C_2','C_3','C_4','C_5'])

       C_1   C_2   C_3   C_4   C_5
v_12  90.0  10.0  10.0  20.0  10.0
v_23  30.0  30.0  20.0  70.0  20.0
v_34  30.0  20.0  10.0  20.0  10.0
v_15  20.0  10.0  80.0  10.0   0.0

我正在 Pandas 中寻找一些方法/函数,它允许我知道大于或等于 70 的值的位置(行和列) (我知道这可以使用循环和条件语句来解决,但我想主持他们。)

我想得到类似的结果:

   Value   Row     Colum
0  90.0    v_12    C_1
1  70.0    v_23    C_4
2  80.0    v_15    C_3

我知道使用“where”方法,我可以获得这样的数据帧:

df.where(df>=70)

       C_1  C_2   C_3   C_4  C_5
v_12  90.0  NaN   NaN   NaN  NaN
v_23   NaN  NaN   NaN  70.0  NaN
v_34   NaN  NaN   NaN   NaN  NaN
v_15   NaN  NaN  80.0   NaN  NaN

但事实是我不知道如何解决这个练习,而不是利用一个逐个元素的循环。

如果您知道任何可以帮助我获得类似结果的功能,我将非常感谢您的合作。谢谢。

回答

你可以这样做:

df.reset_index().melt(id_vars = 'index', var_name = 'column').query('value>=70')

   index column  value
0   v_12    C_1   90.0
11  v_15    C_3   80.0
13  v_23    C_4   70.0

或者

df.stack().reset_index(name='value').query('value>=70')

   level_0 level_1  value
0     v_12     C_1   90.0
8     v_23     C_4   70.0
17    v_15     C_3   80.0

以上归功于@Henry Ecker

你也可以这样做:

ind = np.where(df>=70)

pd.DataFrame([(val, df.index[row], df.columns[col]) 
              for val, (row, col) in zip(df.values[ind], zip(*ind))])
      0     1    2
0  90.0  v_12  C_1
1  70.0  v_23  C_4
2  80.0  v_15  C_3


以上是返回DataFrame[Pandas]中数据组的位置(行和列)的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>