簡體   English   中英

熊貓數據框獲取具有單元格中值的列名稱

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM