Pandas - Использовать значение в столбце в качестве ключа в отдельном словаре - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть словарь, где ключ - это имя, а значение - другой словарь. Например:

dict1 = {name1: {...}, name2: {...},...}

У меня также есть Pandas фрейм данных df со столбцами «A» и «B». Я хотел бы добавить столбец в фрейм данных, используя эти значения столбцов в качестве ключей в dict1. Например, для каждой строки значение в «A», которое будет использоваться в качестве ключа в dict1, и значение в «B», которое будет использоваться в качестве ключа для внутреннего словаря, а результат будет помещен в столбец C. .

Я пробую что-то вроде df[C] = dict1[df[A]][df[C]] или df[C] = df[[A,B]].apply(lambda x,y: dict1[x][y]), но, похоже, ничего не работает. В идеале я хотел бы сделать это без циклического перемещения по строкам без чего-то вроде df.itertuples().

Пример строки df (A, B):

'key1' | 'key2'

Я хочу следующее (A, B , C):

'key1' | 'key2' | dict1['key1']['key2']

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Вы близки - просто нужно изменить код для apply. Попробуйте df['C'] = df.apply(lambda row: dict1[row.A][row.B], axis=1)

0 голосов
/ 29 апреля 2020

вы можете использовать pd.concat для создания фрейма данных со всеми вашими словарями, затем rename_axis, reindex и reset_index, например:

#dummy example
df  = pd.DataFrame({'A':list('aaabbc'), 
                    'B':[0,1,0,0,1,1]})
dict1 = {'a': {0:3, 1:5}, 'b': {0:1, 1:8}, 'c': {0:2, 1:6}}
# do the job
df_f = pd.concat([pd.Series(d, name='C') for d in dict1.values()], 
                 keys=dict1.keys())\
         .rename_axis(['A','B'])\
         .reindex(df[['A','B']]).reset_index()

print (df_f)
   A  B  C
0  a  0  3
1  a  1  5
2  a  0  3
3  b  0  1
4  b  1  8
5  c  1  6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...