我的意圖
我喜歡過濾動態由一個資料幀dict,其保持list的dicts與column和value資訊到過濾器上。
預期結果應如下所示:
result = {'brand': ['Honda','Honda','Toyota'],
'model': ['a','b','d']
}
我的資料框
cars = {'brand': ['Honda','Honda','Honda','Toyota','Toyota','Audi'],
'model': ['a','b','c','d','a','b'],
}
我的字典
正在保存有關汽車之間關系的資訊:
relation = {
'relation1':[
{'brand':'Honda','model':'a'},
{'brand':'Honda','model':'b'},
{'brand':'Toyota','model':'d'}
],
'relation2':[
{'brand':'...','model':'...'},
{'brand':'...','model':'...'}
]
}
我嘗試設定串列理解
' | '.join([f'{repr(k)}=={repr(v)}' for d in relation['relation1'] for k,v in d.items()])
問題
實作過濾器會報錯:
KeyError: "brand=='Honda' | model=='a' | brand=='Honda' | model=='b' | brand=='Toyota' | model=='d'"調整過濾器以將內部
&和外部的 dict 值與|這樣的過濾器相結合,如下所示:(brand=='Honda' & model=='a') | (brand=='Honda' & model=='b') | (brand=='Toyota' & model=='d')
uj5u.com熱心網友回復:
IIUC 你可以簡單地做一個merge:
print (df_cars.merge(pd.DataFrame(relation["relation1"])))
brand model
0 Honda a
1 Honda b
uj5u.com熱心網友回復:
使用嵌套串列理解:
q = ' | '.join([f"({' & '.join(f'{k}=={repr(v)}' for k,v in d.items())})"
for d in relation['relation1']])
print (q)
(brand=='Honda' & model=='a') |
(brand=='Honda' & model=='b') |
(brand=='Toyota' & model=='b')
df = df.query(q)
print (df)
brand model
0 Honda a
1 Honda b
3 Toyota d
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/328545.html
上一篇:如何重命名列中的值?
