不用iterrows更新pandas数据帧

时间:2016-06-08 14:51:36

标签: python pandas dataframe vectorization

我有2个数据框,例如:

 df1:
 index   x     y
 abc     DF    UK
 cde     DF    FR
 grt     FD    UK

 df2:
 index   DF    UK    FR    FD
 abc     nan   nan   nan   nan
 cde     nan   nan   nan   nan
 grt     nan   nan   nan   nan

我想有一个解决方案,将第二个数据框设置为:

 df3:
 index   DF    UK    FR    FD
 abc     1     1     nan   nan
 cde     1     nan   1     nan
 grt     nan   1     nan   1

我试着这样做:

df3.ix[df1.index, df1.ix[:,0]] = 1
df3.ix[df1.index, df1.ix[:,1]] = 1

这似乎在df3中的列的所有行中放置了1。

1 个答案:

答案 0 :(得分:0)

看看pd.get_dummies

pd.get_dummies(df1.set_index('index')).replace(0, np.nan)
df.columns = [c[2:] for c in df.columns]

        DF   FD   FR   UK
index                    
abc    1.0  NaN  NaN  1.0
cde    1.0  NaN  1.0  NaN
grt    NaN  1.0  NaN  1.0