Панды: добавление столбцов в отображение при наличии нескольких ключей в словаре - PullRequest
0 голосов
/ 27 августа 2018

Вот моя проблема, я хотел бы отобразить словарь в DataFrame, но я не могу найти способ сделать это, когда словарь имеет несколько ключей. Обратите внимание, что эти ключи присутствуют в разных столбцах в DataFrame.

Вот пример:

это тот фрейм данных, который у меня есть в начале, df:

        Index      key 
0          10       k1       
1          12       k2   
2           3       k1    
3          34       k3  

вот мой словарь, d:

{('k1', 10):v1,('k1', 3):v2,('k2', 12):v3,('k3', 34):v4}

Я хотел бы иметь в конце, df:

        Index      key    value
0          10       k1       v1    
1          12       k2       v2
2           3       k1       v3
3          34       k3       v4

есть ли способ сделать это так же, как вы можете сделать это, когда у вас есть словарь с одним ключом:

df ["value"] = df ["key"]. Map (d)

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

IIUC с использованием merge

mergedf=pd.Series(d).reset_index()
mergedf.columns=['key','Index','values']
df.merge(mergedf,how='left')
Out[642]: 
   Index key values
0     10  k1     v1
1     12  k2     v3
2      3  k1     v2
3     34  k3     v4
0 голосов
/ 27 августа 2018

Используйте понимание списка с get для возврата None, если нет соответствующих значений:

df['value'] = [d.get(x) for x in zip(df['key'], df['Index'])]
print (df)
   Index key value
0     10  k1    v1
1     12  k2    v3
2      3  k1    v2
3     34  k3    v4

d = {('k1', 10):'v1',('k1', 3):'v2',('k2', 12):'v3'}

df['value'] = [d.get(x) for x in zip(df['key'], df['Index'])]
print (df)
   Index key value
0     10  k1    v1
1     12  k2    v3
2      3  k1    v2
3     34  k3  None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...