繁体   English   中英

使用字典参考另一列值来映射熊猫数据框的一列中的缺失值

[英]mapping missing values in one column of pandas dataframe using dictionary with reference to another column values

我有一个数据框

> print(df)
[Out:]
activity-code    activity
-------------------------
0                unknown
99               NaN
84               sports
72;99            NaN
57               recreational
57;99;11         NaN
11               NaN

还有一本以活动代码为键的字典,

> print(act_dict)
[Out:]
{10: 'unknown',
11: 'cultural',
57: 'recreational',
72: 'social service',
84: 'sports',
99: 'education'}

数据框内的所有值都存储为字符串,即使活动代码的值也为字符串。 鉴于字典键是整数类型,我想参考字典中存储在活动代码列中的值,以某种方式映射并替换活动中缺少的值。 因此,所需的输出数据帧应该是这样的,

> print(df)
[Out:]
activity-code    activity
-------------------------
0                unknown
99               education
84               sports
72;99            social service;education
57               recreational
57;99;11         recreational;education;cultural
11               cultural

到目前为止,这是我尝试过的

df['new-activity'] = df['activity-code'].str.split(';').apply(lambda x: ';'.join([act_dict[int(i)] for i in x]))

但对于活动代码不是单个代码值的单个值,我得到了KeyError。 错误显示KeyError: 0

如何将字典值映射到数据框活动列中的缺失值?

使用applystr.split ,而不是apply ,使用列表str.split并以';' str.split

df['activity'] = df['activity-code'].str.split(';').apply(lambda x: ';'.join([act_dict[int(i)] for i in x]))

现在:

print(df)

输出:

  activity-code                         activity
0             0                          unknown
1            99                        education
2            84                           sports
3         72;99         social service;education
4            57                     recreational
5      57;99;11  recreational;education;cultural
6            11                         cultural

如果您的字典中没有针对0的值,则可以使用filter():

df['activity']= df['activity-code'].apply(lambda x:'; '.join(list(filter(None,map(act_dict.get,list(map(int,x.split(';'))))))))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM