Python 将虚拟列添加到原始数据帧

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/23208745/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 02:30:14  来源:igfitidea点击:

adding dummy columns to the original dataframe

pythonpandasdataframeone-hot-encoding

提问by Brad

I have a dataframe looks like this:

我有一个数据框看起来像这样:

 ????????????JOINED_CO GENDER ???EXEC_FULLNAME ?GVKEY ?YEAR ?CONAME ?BECAMECEO ?REJOIN ??LEFTOFC ???LEFTCO ?RELEFT ???REASON ?PAGE
CO_PER_ROL ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
5622 ?????????????NaN ??MALE ??Ira A. Eichner ??1004 ?1992 ?AAR CORP ??19550101 ????NaN ?19961001 ?19990531 ????NaN ?RESIGNED ???79
5622 ?????????????NaN ??MALE ??Ira A. Eichner ??1004 ?1993 ?AAR CORP ??19550101 ????NaN ?19961001 ?19990531 ????NaN ?RESIGNED ???79
5622 ?????????????NaN ??MALE ??Ira A. Eichner ??1004 ?1994 ?AAR CORP ??19550101 ????NaN ?19961001 ?19990531 ????NaN ?RESIGNED ???79
5622 ?????????????NaN ??MALE ??Ira A. Eichner ??1004 ?1995 ?AAR CORP ??19550101 ????NaN ?19961001 ?19990531 ????NaN ?RESIGNED ???79
5622 ?????????????NaN ??MALE ??Ira A. Eichner ??1004 ?1996 ?AAR CORP ??19550101 ????NaN ?19961001 ?19990531 ????NaN ?RESIGNED ???79
5622 ?????????????NaN ??MALE ??Ira A. Eichner ??1004 ?1997 ?AAR CORP ??19550101 ????NaN ?19961001 ?19990531 ????NaN ?RESIGNED ???79
5622 ?????????????NaN ??MALE ??Ira A. Eichner ??1004 ?1998 ?AAR CORP ??19550101 ????NaN ?19961001 ?19990531 ????NaN ?RESIGNED ???79
5623 ?????????????NaN ??MALE ?David P. Storch ??1004 ?1992 ?AAR CORP ??19961009 ????NaN ??????NaN ??????NaN ????NaN ??????NaN ???57
5623 ?????????????NaN ??MALE ?David P. Storch ??1004 ?1993 ?AAR CORP ??19961009 ????NaN ??????NaN ??????NaN ????NaN ??????NaN ???57
5623 ?????????????NaN ??MALE ?David P. Storch ??1004 ?1994 ?AAR CORP ??19961009 ????NaN ??????NaN ??????NaN ????NaN ??????NaN ???57
5623 ?????????????NaN ??MALE ?David P. Storch ??1004 ?1995 ?AAR CORP ??19961009 ????NaN ??????NaN ??????NaN ????NaN ??????NaN ???57
5623 ?????????????NaN ??MALE ?David P. Storch ??1004 ?1996 ?AAR CORP ??19961009 ????NaN ??????NaN ??????NaN ????NaN ??????NaN ???57

For the YEAR value, I like to add year columns (1993,1994...,2009) to the original dataframe, If the value in YEAR is 1992, then the value in the 1992 column should be 1 otherwise 0.

对于 YEAR 值,我喜欢在原始数据框中添加年份列 (1993,1994...,2009),如果 YEAR 中的值为 1992,则 1992 列中的值应为 1,否则为 0。

I used a very stupid for loop, but it seems to run forever as I have a large dataset. Could anyone help me with it, thanks a lot!

我使用了一个非常愚蠢的 for 循环,但它似乎永远运行,因为我有一个大数据集。谁能帮我解决一下,非常感谢!

采纳答案by unutbu

In [77]: df = pd.concat([df, pd.get_dummies(df['YEAR'])], axis=1); df
Out[77]: 
      JOINED_CO GENDER    EXEC_FULLNAME  GVKEY  YEAR    CONAME  BECAMECEO  \
5622        NaN   MALE   Ira A. Eichner   1004  1992  AAR CORP   19550101   
5622        NaN   MALE   Ira A. Eichner   1004  1993  AAR CORP   19550101   
5622        NaN   MALE   Ira A. Eichner   1004  1994  AAR CORP   19550101   
5622        NaN   MALE   Ira A. Eichner   1004  1995  AAR CORP   19550101   
5622        NaN   MALE   Ira A. Eichner   1004  1996  AAR CORP   19550101   
5622        NaN   MALE   Ira A. Eichner   1004  1997  AAR CORP   19550101   
5622        NaN   MALE   Ira A. Eichner   1004  1998  AAR CORP   19550101   
5623        NaN   MALE  David P. Storch   1004  1992  AAR CORP   19961009   
5623        NaN   MALE  David P. Storch   1004  1993  AAR CORP   19961009   
5623        NaN   MALE  David P. Storch   1004  1994  AAR CORP   19961009   
5623        NaN   MALE  David P. Storch   1004  1995  AAR CORP   19961009   
5623        NaN   MALE  David P. Storch   1004  1996  AAR CORP   19961009   

      REJOIN   LEFTOFC    LEFTCO  RELEFT    REASON  PAGE  1992  1993  1994  \
5622     NaN  19961001  19990531     NaN  RESIGNED    79     1     0     0   
5622     NaN  19961001  19990531     NaN  RESIGNED    79     0     1     0   
5622     NaN  19961001  19990531     NaN  RESIGNED    79     0     0     1   
5622     NaN  19961001  19990531     NaN  RESIGNED    79     0     0     0   
5622     NaN  19961001  19990531     NaN  RESIGNED    79     0     0     0   
5622     NaN  19961001  19990531     NaN  RESIGNED    79     0     0     0   
5622     NaN  19961001  19990531     NaN  RESIGNED    79     0     0     0   
5623     NaN       NaN       NaN     NaN       NaN    57     1     0     0   
5623     NaN       NaN       NaN     NaN       NaN    57     0     1     0   
5623     NaN       NaN       NaN     NaN       NaN    57     0     0     1   
5623     NaN       NaN       NaN     NaN       NaN    57     0     0     0   
5623     NaN       NaN       NaN     NaN       NaN    57     0     0     0   

      1995  1996  1997  1998  
5622     0     0     0     0  
5622     0     0     0     0  
5622     0     0     0     0  
5622     1     0     0     0  
5622     0     1     0     0  
5622     0     0     1     0  
5622     0     0     0     1  
5623     0     0     0     0  
5623     0     0     0     0  
5623     0     0     0     0  
5623     1     0     0     0  
5623     0     1     0     0  

If you'd like to delete the YEARcolumn, then you could follow this up with del df['YEAR']. Or, drop the YEARcolumn from dfbefore calling concat:

如果您想删除该YEAR列,那么您可以使用del df['YEAR']. 或者,在调用之前删除YEAR列:dfconcat

df = pd.concat([df.drop('YEAR', axis=1), pd.get_dummies(df['YEAR'])], axis=1)