我有一個包含多列的 Pandas 資料框和一個帶有與列名對應的鍵的字典。我想根據字典值檢查列值,并根據列值是否滿足“大于或等于”條件回傳“是”或“否”。
例子:
import pandas as pd
dfdict = {'col1': [1,2,3], 'col2':[2,3,4], 'col3': [3.2, 4.2, 7.7]}
checkdict = {'col1': 2, 'col2': 3, 'col3': 1.5}
df = pd.DataFrame(dfdict)
對于每一列,對于每一行,檢查行值是否大于或等于字典中的值。對于該行,如果任何列滿足條件,則向新創建的列回傳“是”,否則回傳“否”。
我試過的:
def checkcond(element):
if not math.isnan(element):
x = checkdict[element]
return 1 if element >= x else 0
else:
pass
df['test'] = df.applymap(checkcond)
但當然這不起作用,因為行值提供給 checkcond 函式而不是列名和行。
我也試過:
df['test'] = pd.np.where(df[['col1', 'col2', 'col3']].ge(0).any(1, skipna=True), 'Y', 'N')
但這只會為“ge”條件取一個值,而我想根據每一列的字典值檢查行值。
任何建議,將不勝感激!
uj5u.com熱心網友回復:
將您的字典轉換為 Series 并進行簡單的比較:
df.ge(pd.Series(checkdict)).replace({True: 'yes', False: 'no'})
輸出:
col1 col2 col3
0 no no yes
1 no no yes
2 yes yes yes
要獲取每行聚合:
df['any'] = df.ge(pd.Series(checkdict)).any(1).map({True: 'yes', False: 'no'})
輸出:
col1 col2 col3 any
0 1 2 3.2 yes
1 2 3 4.2 yes
2 3 4 7.7 yes
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/370801.html
