[英]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
如何將字典值映射到數據框活動列中的缺失值?
使用apply
和str.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.