我正在嘗試遍歷資料框中的列,當值與我的字典中的鍵匹配時,它應該將另一列中的值替換為匹配鍵的值。
df = pd.DataFrame({'id': ['123', '456', '789'], 'Full': ['Yes', 'No', 'Yes'], 'Cat':['','','']})
cats = {'123':'A', '456':'B', '789':'C'}
for val in df.id:
for key, cat in cats.items():
if key == val:
df.Cat.loc[(df.Full == 'Yes')] = cat
df
id Full Cat
0 123 Yes C
1 456 No
2 789 Yes C
我希望 id 123 有一個“A”的貓,但它只回傳“C”
誰能向我解釋為什么它沒有遍歷字典中的鍵?
uj5u.com熱心網友回復:
您可以使用Series.replace
并傳遞字典,并將結果分配給Cat
列:
>>> df['Cat'] = df.id.replace(cats)
#output:
id Full Cat
0 123 Yes A
1 456 No B
2 789 Yes C
或者,如果您打算只替換行,Full
一種Yes
方法是簡單地應用一個函式,axis=1
然后為每行實作邏輯:
>>> df['Cat'] = df.apply(lambda x: cats.get(x.id, '') if x.Full == 'Yes' else '',
axis=1)
id Full Cat
0 123 Yes A
1 456 No
2 789 Yes C
uj5u.com熱心網友回復:
對于列中的過濾值,請使用dict.get
:
mask = df.Full == 'Yes'
df.loc[mask, 'Cat'] = df.loc[mask, 'id'].apply(lambda x: cats.get(x, ''))
print (df)
id Full Cat
0 123 Yes A
1 456 No
2 789 Yes C
如果 dict 中沒有匹配項,則 createNone
使用:
cats = {'123':'A', '456':'B', '7890':'C'}
mask = df.Full == 'Yes'
df.loc[mask, 'Cat'] = df.loc[mask, 'id'].apply(cats.get)
print (df)
id Full Cat
0 123 Yes A
1 456 No
2 789 Yes None
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/504902.html
上一篇:使用字串作為字典的索引