我正在尝试获取单元格值小于.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)
答案 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 question对any
的工作原理有一个很好的解释。我们可以使用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