![](/img/trans.png)
[英]Python 3: Get index names associated with the values in a certain column of pandas dataframe
[英]Pandas dataframe get column names with values in cell
我正在嘗試獲取單元格值小於0.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)
列表理解是一種方法:
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。
遍歷各列,並檢查是否有任何值符合您的條件:
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
是內置的。 這個問題對any
工作方式都有很好的解釋。 我們可以使用一個set
來確保每一列只會出現一次。
我們使用DataFrame.min()獲取導致選擇此列的較小值。
您可以使用堆棧,然后濾出<0.2的值。 然后保留上一個重復的值
pvals2.stack()[pvals2.stack().lt(.2)].drop_duplicates(keep='last')
col3 col2 0.01
dtype: float64
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.