我有一个数据框,其变量编码为整数,我想用实际的值标签替换它。
例如,假设我有以下数据框:
>>> df=pd.DataFrame([[1,3],[2,2],[3,2]], columns=['Q1','Q2'])
>>> df
Q1 Q2
0 1 3
1 2 2
2 3 2
如果数字1,2,3在两列中代表相同的值,我会有一个字典看起来像这样:
labels={1:'Yes',2:'No',3:'Unsure'}
我可以使用applymap轻松重新编码:
>>> df.applymap(labels.get)
Q1 Q2
0 Yes Unsure
1 No No
2 Unsure No
但是,假设整数代码在每列中的不同标签上。例如,我的值标签字典可能如下所示:
labels2={'Q1':{1:'Yes',2:'No',3:'Unsure'},
'Q2':{1:'Very', 2:'A Little', 3:'Not at all'}}
在这种情况下,重新编码值的最有效方法是什么?
我可以使用apply和for循环(见下文),但它非常笨重。还有更好的方法吗?
>>> import pandas as pd
>>> dfs=[]
>>> for Question in labels2:
... d=df[Question].map(labels2[Question].get)
... dfs.append(d)
...
>>> pd.concat(dfs,1)
Q1 Q2
0 Yes Not at all
1 No A Little
2 Unsure A Little
答案 0 :(得分:1)
您可以使用apply
并使用列的name
属性获取外部字典的键:
>>> df.apply(lambda col: col.map(labels2[col.name]))
Q1 Q2
0 Yes Not at all
1 No A Little
2 Unsure A Little