Pandas数据框使用单元格中的值获取列名称

时间:2018-03-02 20:33:17

标签: python python-3.x pandas

我正在尝试获取单元格值小于.2的列名称,而不重复列的组合。我试过这个迭代列名而没有成功:

pvals2=pd.DataFrame({'col1': [1, .2,.7], 
                     'col2': [.2, 1,.01],
                     'col3': [.7,.01,1]},
                    index = ['col1', 'col2', 'col3'])
print(pvals2)
print('---')
pvals2.transpose().join(pvals2, how='outer')

我的目标是:

col3 col2 .01
#col2 col3 .01 #NOT INCLUDED (because it it a repeat)

4 个答案:

答案 0 :(得分:1)

列表理解是一种方式:

pvals2 = pd.DataFrame({'col1': [1, .2,.7], 'col2': [.2, 1,.01], 'col3': [.7,.01,1]},
                      index = ['col1', 'col2', 'col3'])

res = [col for col in pvals2 if (pvals2[col] < 0.2).any()]

# ['col2', 'col3']

要获取值,与所需输出一样,需要更多规范,因为列可能有多个小于0.2的值。

答案 1 :(得分:0)

遍历列并检查是否有任何值符合您的条件:

pvals2=pd.DataFrame({'col1': [1, .2,.7], 
                 'col2': [.2, 1,.01],
                 'col3': [.7,.01,1]})

cols_with_small_values = set()
for col in pvals2.columns:     
    if any(i < 0.2 for i in pvals2[col]):
        cols_with_small_values.add(col)
        cols_with_small_values.add(pvals2[col].min())

print(cols_with_small_values)


RESULT: {'col3', 0.01, 'col2'}

any是内置的。 This questionany的工作原理有一个很好的解释。我们可以使用set来确保每列只显示一次。

我们使用DataFrame.min()来获取导致我们选择此列的小值。

答案 2 :(得分:0)

您可以使用堆栈然后过滤掉值&lt; 0.2。然后保留最后一个重复的值

pvals2.stack()[pvals2.stack().lt(.2)].drop_duplicates(keep='last')
col3  col2    0.01
dtype: float64

答案 3 :(得分:0)

pvals2=pd.DataFrame({'col1': [1, .2,.7], 
             'col2': [.2, 1,.01],
             'col3': [.7,.01,1]},
            index = ['col1', 'col2', 'col3'])


pvals2.min().where(lambda x : x<0.1).dropna()

输出

col2    0.01
col3    0.01
dtype: float64