2017-09-05 180 views
1

的格式我有一個python /大熊貓據幀有兩列:(表列清單)的Python /大熊貓傳輸數據幀

VNAME SHEET 
0 atnpi [HSP, HHA, HO_, INP] 
1 atupi [HSP, HHA, INP] 
2 carnm [HB_] 
3 clmid [HSP, HHA, HB_, HO_, INP] 
4 clseq [HSP, HHA, HO_, INP] 

我想將它轉移到一個數據幀像

VNAME HSP HHA HB_ HO_ INP 
0 atnpi TRUE TRUE  TRUE TRUE 
1 atupi TRUE TRUE    TRUE 
2 carnm    TRUE 
3 clmid TRUE TRUE TRUE TRUE TRUE 
4 clseq TRUE TRUE  TRUE TRUE 
+0

是一個列表還是一個字符串? –

+0

是一覽。謝謝 – kkjoe

回答

2
你可以做到這一點

的一種方法如下:

df1 = df1.set_index('VNAME') 

(df1['SHEET'].apply(pd.Series).stack() 
      .reset_index(1, drop=True) 
      .to_frame().assign(key=True) 
      .set_index(0,append=True)['key'] 
      .unstack() 
      .fillna('') 
      .rename_axis(None,1) 
      .reset_index()) 

輸出:

VNAME HB_ HHA HO_ HSP INP 
0 atnpi  True True True True 
1 atupi  True  True True 
2 carnm True       
3 clmid True True True True True 
4 clseq  True True True True 

或獲得字符串 'TRUE'

(df1['SHEET'].apply(pd.Series).stack() 
        .reset_index(1, drop=True) 
        .to_frame().assign(key='TRUE') 
        .set_index(0,append=True)['key'] 
        .unstack().fillna('') 
        .rename_axis(None,1) 
        .reset_index()) 

輸出:

VNAME HB_ HHA HO_ HSP INP 
0 atnpi  TRUE TRUE TRUE TRUE 
1 atupi  TRUE  TRUE TRUE 
2 carnm TRUE       
3 clmid TRUE TRUE TRUE TRUE TRUE 
4 clseq  TRUE TRUE TRUE TRUE 

選項2

df1 = df1.set_index('VNAME') 
df2 = df1['SHEET'].apply(pd.Series).stack().reset_index(name='SHEET').drop('level_1', axis=1) 
pd.crosstab(df2.VNAME, df2.SHEET).astype(bool).replace(False,'').reset_index().rename_axis(None,1) 

輸出:

VNAME HB_ HHA HO_ HSP INP 
0 atnpi  True True True True 
1 atupi  True  True True 
2 carnm True       
3 clmid True True True True True 
4 clseq  True True True True