所以我有一個涵蓋所有市場的大檔案,以及一個以股票代碼為鍵的符號字典。我只想更新“Mk 1”行的“子市場”列,我知道這很容易完成
table2.loc[table2['Market'] == "Mk 1" , ['Sub Market']]
如果符號(即股票代碼)在字典中,我一直試圖將“A”分配給子市場,否則為“B”,但不斷收到 TypeError: unhashable type: 'Series'
dict:
| 鍵(代碼) | 值(名稱) |
|---|---|
| 美國廣播公司 | ABC公司 |
| XYZ | XYZ 公司 |
表 2
| 市場 | 子市場 | 象征 |
|---|---|---|
| MK1 | 美國廣播公司 | |
| MK 1 | 美國廣播公司 | |
| MK 1 | 123 | |
| MK 2 | 123 | |
| MK 3 | XYZ |
預期結果
| 市場 | 子市場 | 象征 |
|---|---|---|
| MK1 | 一種 | 美國廣播公司 |
| MK 1 | 一種 | 美國廣播公司 |
| MK 1 | 乙 | 123 |
| MK 2 | 123 | |
| MK 3 | XYZ |
uj5u.com熱心網友回復:
使用isin和map:
df.loc[df['Market'].isin(['Mk 1', 'Mk1']), 'Sub Market'] = df['Symbol'].isin(dct).map({True:'A', False:'B'})
輸出:
>>> df
Market Sub Market Symbol
0 Mk1 A ABC
1 Mk 1 A ABC
2 Mk 1 B 123
3 Mk 2 B 123
4 Mk 3 A XYZ
uj5u.com熱心網友回復:
一種選擇是使用numpy.where布爾掩碼msk過濾等于“Mk 1”的市場值:
import numpy as np
msk = df2['Market'].isin(['Mk1', 'Mk 1'])
df2.loc[msk, 'Sub Market'] = np.where(df2.loc[msk, 'Symbol'].isin(dct['key (ticker)']), 'A', 'B')
輸出:
Market Sub Market Symbol
0 Mk1 A ABC
1 Mk 1 A ABC
2 Mk 1 B 123
3 Mk 2 NaN 123
4 Mk 3 NaN XYZ
請注意,它的拼寫都Mk1和Mk 1(我假設它們是同一個市場,因為你對待它們是一樣的);這就是為什么我們需要使用isinto 構造msk,否則,它可能是df2['Market']=='Mk 1'.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/444461.html
