Pandas 获取python中的列和行名称

Pandas 获取python中的列和行名称,pandas,Pandas,对于pandas数据框中的每一行,我希望找到具有最小值的单元格,并分别返回其行和列名。我还想检查最小值是否小于1 例如: NAMES, Oil, Fat, Salt Salad, 0.2, 0.1, 0.8 Bread, 0.1, 0.9, 0.1 Rice, 1, 1, 1 上述数据帧的输出: ['Salad', 'Fat'] [['Bread', 'Oil'], ['Bread', 'Salt']] <No output because the minimum i

对于pandas数据框中的每一行,我希望找到具有最小值的单元格,并分别返回其行和列名。我还想检查最小值是否小于1

例如:

NAMES, Oil, Fat, Salt
Salad,  0.2, 0.1,  0.8
Bread,  0.1, 0.9,  0.1
Rice,    1,   1,  1
上述数据帧的输出:

['Salad', 'Fat']
[['Bread', 'Oil'], ['Bread', 'Salt']]
<No output because the minimum is not less than 1>

请帮助我。

我认为您需要添加新条件:

pairs = (df.set_index('NAMES')
          .apply(lambda row: [[row.name, l] for l in row[(row == row.min()) & 
                                                         (row < 1)].index], axis=1)
          .values.tolist())
print (pairs)
[[['Salad', 'Fat']], [['Bread', 'Oil'], ['Bread', 'Salt']], []]


使用

[2224]中的
:dff=df.set\u索引('NAMES'))

在[2225]:dff.where(dffMany感谢您的回答:)中,但我不需要返回任何空列表。我希望它是这样的<代码>[[['色拉'、['脂肪']、[[[面包'、[油']、['面包'、[盐']]]
。请告诉我怎么做:)太好了:)非常感谢!伟大的非常感谢:)
pairs = (df.set_index('NAMES')
          .apply(lambda row: [[row.name, l] for l in row[(row == row.min()) & 
                                                         (row < 1)].index], axis=1)
          .values.tolist())
print (pairs)
[[['Salad', 'Fat']], [['Bread', 'Oil'], ['Bread', 'Salt']], []]
pairs = [x for x in pairs if x]
print (pairs)
[[['Salad', 'Fat']], [['Bread', 'Oil'], ['Bread', 'Salt']]]
#for python 3 add list
pairs = list(filter(None, pairs))
print (pairs)
[[['Salad', 'Fat']], [['Bread', 'Oil'], ['Bread', 'Salt']]]
pairs = [x for x in pairs if x != []]
print (pairs)
[[['Salad', 'Fat']], [['Bread', 'Oil'], ['Bread', 'Salt']]]
In [2224]: dff = df.set_index('NAMES')

In [2225]: dff.where(dff<1).eq(dff.min(1), axis=0).apply(
                    lambda x: [[x.name, v] for v in x[x].index], axis=1).values.tolist()
Out[2225]: [[['Salad', ' Fat']], [['Bread', ' Oil'], ['Bread', ' Salt']], []]
In [2230]: vals = dff.where(dff<1).eq(dff.min(1), axis=0).apply(
             lambda x: [[x.name, v] for v in x[x].index], axis=1).values.tolist()

In [2231]: filter(None, vals)
Out[2231]: [[['Salad', ' Fat']], [['Bread', ' Oil'], ['Bread', ' Salt']]]
In [2235]: vals2 = dff.where(dff<1).eq(dff.min(1), axis=0).apply(
               lambda x: [[x.name, v] for v in x[x].index], axis=1)

In [2236]: [x for x in vals2 if x]
Out[2236]: [[['Salad', ' Fat']], [['Bread', ' Oil'], ['Bread', ' Salt']]]