簡體   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