我正在嘗試實作以下目標:檢查字典中的每個鍵值是否在列層的字串中。如果滿足條件,則將字典中的值附加到 pandas 資料框。
例如,如果圖層中包含 BR 和 EWKS,則在新列中將有 BRIDGE-EARTHWORKS。
資料框
mapping = {'IDs': [1244, 35673, 37863, 76373, 234298],
'Layers': ['D-BR-PILECAPS-OUTLINE 2',
'D-BR-STEEL-OUTLINE 2D-TERR-BOUNDARY',
'D-SUBG-OTHER',
'D-COMP-PAVE-CONC2',
'D-EWKS-HINGE']}
df = pd.DataFrame(mapping)
字典
d1 = {"BR": "Bridge", "EWKS": "Earthworks", "KERB": "Kerb", "TERR": "Terrain"}
到目前為止我的代碼是:
for i in df.Layers
for x in d1.keys():
first_key = list(d1)[0]
first_val = list(d1.values())[0]
print(first_key,first_val)
if first_key in i:
df1 = df1.append(first_val, ignore_index = True)
# df.apply(first_val)
請注意,我認為在創建資料框之前在映射步驟中進行理解可能會更容易。我對 python 還是很陌生,所以任何提示都值得贊賞。謝謝!
uj5u.com熱心網友回復:
用于Series.str.extractall所有匹配的鍵,然后通過字典映射Series.map和最后聚合join:
pat = r'({})'.format('|'.join(d1.keys()))
df['new'] = df['Layers'].str.extractall(pat)[0].map(d1).groupby(level=0).agg('-'.join)
print (df)
IDs Layers new
0 1244 D-BR-PILECAPS-OUTLINE 2 Bridge
1 35673 D-BR-STEEL-OUTLINE 2D-TERR-BOUNDARY Bridge-Terrain
2 37863 D-SUBG-OTHER NaN
3 76373 D-COMP-PAVE-CONC2 NaN
4 234298 D-EWKS-HINGE Earthworks
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/534503.html
上一篇:為什么我的Python代碼在參考大于14的字典鍵時不起作用?
下一篇:將字典中的專案放入字串中
