我有以下資料框:
{'POINT_ID': {0: 'ABC B4-14 c1-1', 1: 'ABC B4-14 c1-2', 2: 'ABC 14-10 c6-2', 3: 'ABC 14-10 c6-3', 4: 'ABC 14-03 c12-1', 5: 'ABC 14-03 c12-2', 6: 'ABC 14-01A c9-2', 7: 'ABC 14-01A c9-3', 8: 'DE 368 c1-1', 9: 'DE 368 c1-2', 10: 'DE 483 c3-2', 11: 'DE 483 c3-3', 12: 'FG 1 c4-1', 13: 'HI 1A c4-3'}, 'Count': {0: 1.25, 1: 2.66, 2: 3.5, 3: 6.6, 4: 9.54, 5: 10.57, 6: 11.8, 7: 2.5, 8: 1.1, 9: 1.04, 10: 2.22, 11: 3.22, 12: 1.5, 13: 1.2}}
我想使用此字典映射 POINT_ID 列中的值:
labels = {'ABC B4-14': ['Local 1', 'Context 1'],
'ABC 14-10': ['Local 2', 'Context 2'],
'ABC 14-03': ['Local 2', 'Context 2'],
'ABC 14-01A': ['Local 1', 'Context 1'],
'DE 368': ['Local 3', 'Context 3'],
'DE 483': ['Local 3', 'Context 4'],
'FG 1': ['Local 4', 'Context 5'],
'HI 1A': ['Local 5', 'Context 6']}
所以我可以生成以下資料框:
{'POINT_ID': {0: 'ABC B4-14 c1-1', 1: 'ABC B4-14 c1-2', 2: 'ABC 14-10 c6-2', 3: 'ABC 14-10 c6-3', 4: 'ABC 14-03 c12-1', 5: 'ABC 14-03 c12-2', 6: 'ABC 14-01A c9-2', 7: 'ABC 14-01A c9-3', 8: 'DE 368 c1-1', 9: 'DE 368 c1-2', 10: 'DE 483 c3-2', 11: 'DE 483 c3-3', 12: 'FG 1 c4-1', 13: 'HI 1A c4-3'}, 'Count': {0: 1.25, 1: 2.66, 2: 3.5, 3: 6.6, 4: 9.54, 5: 10.57, 6: 11.8, 7: 2.5, 8: 1.1, 9: 1.04, 10: 2.22, 11: 3.22, 12: 1.5, 13: 1.2}, 'Local': {0: 'Local 1', 1: 'Local 1', 2: 'Local 2', 3: 'Local 2', 4: 'Local 2', 5: 'Local 2', 6: 'Local 1', 7: 'Local 1', 8: 'Local 3', 9: 'Local 3', 10: 'Local 3', 11: 'Local 3', 12: 'Local 4', 13: 'Local 5'}, 'Context': {0: 'Context 1', 1: 'Context 1', 2: 'Context 2', 3: 'Context 2', 4: 'Context 2', 5: 'Context 2', 6: 'Context 1', 7: 'Context 1', 8: 'Context 3', 9: 'Context 3', 10: 'Context 4', 11: 'Context 4', 12: 'Context 5', 13: 'Context 6'}}
字典映射鍵包含在 POINT_ID 值中,但它們不完全匹配。此外,從字典映射值中,有一個串列,串列的每個成員都需要生成不同的列。
uj5u.com熱心網友回復:
您可以從字典和merge提取的 POINT_ID 的第一部分制作一個 DataFrame:
df2 = pd.DataFrame(labels).set_axis(['Local', 'Context']).T
ID = df['POINT_ID'].str.extract('^(.*?) [\S] $', expand=False)
out = df.merge(df2, left_on=ID, right_index=True).drop(columns='key_0')
其他選項,map并且join:
ID = df['POINT_ID'].str.extract('^(.*?) [\S] $', expand=False)
out = df.join(pd.DataFrame(ID.map(labels).to_list(), columns=['Local', 'Context']))
輸出:
POINT_ID Count Local Context
0 ABC B4-14 c1-1 1.25 Local 1 Context 1
1 ABC B4-14 c1-2 2.66 Local 1 Context 1
2 ABC 14-10 c6-2 3.50 Local 2 Context 2
3 ABC 14-10 c6-3 6.60 Local 2 Context 2
4 ABC 14-03 c12-1 9.54 Local 2 Context 2
5 ABC 14-03 c12-2 10.57 Local 2 Context 2
6 ABC 14-01A c9-2 11.80 Local 1 Context 1
7 ABC 14-01A c9-3 2.50 Local 1 Context 1
8 DE 368 c1-1 1.10 Local 3 Context 3
9 DE 368 c1-2 1.04 Local 3 Context 3
10 DE 483 c3-2 2.22 Local 3 Context 4
11 DE 483 c3-3 3.22 Local 3 Context 4
12 FG 1 c4-1 1.50 Local 4 Context 5
13 HI 1A c4-3 1.20 Local 5 Context 6
uj5u.com熱心網友回復:
我假設我要把所有東西都帶到最后一個空間。
df2 = pd.DataFrame(
df.POINT_ID.str.rsplit(n=1).str[0].map(labels).tolist(), # Where magic happens
index=df.index, columns=['Local', 'Context']
)
df.join(df2)
POINT_ID Count Local Context
0 ABC B4-14 c1-1 1.25 Local 1 Context 1
1 ABC B4-14 c1-2 2.66 Local 1 Context 1
2 ABC 14-10 c6-2 3.50 Local 2 Context 2
3 ABC 14-10 c6-3 6.60 Local 2 Context 2
4 ABC 14-03 c12-1 9.54 Local 2 Context 2
5 ABC 14-03 c12-2 10.57 Local 2 Context 2
6 ABC 14-01A c9-2 11.80 Local 1 Context 1
7 ABC 14-01A c9-3 2.50 Local 1 Context 1
8 DE 368 c1-1 1.10 Local 3 Context 3
9 DE 368 c1-2 1.04 Local 3 Context 3
10 DE 483 c3-2 2.22 Local 3 Context 4
11 DE 483 c3-3 3.22 Local 3 Context 4
12 FG 1 c4-1 1.50 Local 4 Context 5
13 HI 1A c4-3 1.20 Local 5 Context 6
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/456006.html
上一篇:根據鍵值動態獲取字典
下一篇:如何從嵌套字典中繪制箱線圖
