Pandas使用列中的值作为单独字典中的键

2024-04-26 23:38:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字典,其中键是一个名称,值是另一个字典。例如:

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

我还有一个带有列“a”和“B”的熊猫数据帧df。 我想将这些列值作为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']

Tags: 数据lambda名称df字典情况事情apply
2条回答

您可以使用pd.concat创建包含所有词典的数据帧,然后使用rename_axisreindexreset_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

很接近-只需修改apply的代码即可。试试df['C'] = df.apply(lambda row: dict1[row.A][row.B], axis=1)

相关问题 更多 >