在Pandas中有效标记变量值

时间:2015-10-27 17:44:25

标签: python pandas

我有一个数据框,其变量编码为整数,我想用实际的值标签替换它。

例如,假设我有以下数据框:

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

1 个答案:

答案 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