2016-10-03 6 views
1

データフレームdf1があり、いくつかの列の名前がdf1であるリストがあります。isinを使用してリストからデータフレーム列を取得

df1: 
User_id month day Age year CVI ZIP sex wgt 
0   1 7 16 1977  2  NA M NaN 
1   2 7 16 1977  3  NA M NaN 
2   3 7 16 1977  2  DM F NaN 
3   4 7 16 1977  7  DM M NaN 
4   5 7 16 1977  3  DM M NaN 
...  ... ... ... ... ...  ... ... ... 
35544  35545 12 31 2002 15  AH NaN NaN 
35545  35546 12 31 2002 15  AH NaN NaN 
35546  35547 12 31 2002 10  RM F 14 
35547  35548 12 31 2002  7  DO M 51 
35548  35549 12 31 2002  5  NaN NaN NaN 

list= [u"User_id", u"day", u"ZIP", u"sex"] 

私はomlyリストに含まれていない列が含まれます、リストにあるこれらの列、およびデータフレームdf3を含む新しいデータフレームdf2を作りたいです。

df2=df1[df1[df1.columns[1]].isin(list)] 

しかし、結果として私が手::

Hereは、私は私がする必要があることがわかった

Empty DataFrame 
Columns: [] 
Index: [] 
[0 rows x 9 columns] 

私が間違ってodoingとどのように私は必要な結果を得ることができますどのようなイム?なぜそれが4になるとしたら「9列」ですか?

+1

申し訳ありませんが、 "リスト" としてリストに名前を付けることはありませんが、あなたは、 'DF2 = DF1 [リスト]'の最初のケースの後にありますか?もう1つは、 'df3 = df1 [df1.columns [〜df1.columns.isin(list)]]' – EdChum

+0

です。 – Polly

答えて

1

ソリューション:

L = [u"User_id", u"day", u"ZIP", u"sex"] 

df2 = df1[L] 
df3 = df1[df1.columns.difference(df2.columns)] 
print (df2) 
    User_id day ZIP sex 
0  0 7 NaN M 
1  1 7 NaN M 
2  2 7 DM F 
3  3 7 DM M 
4  4 7 DM M 

print (df3) 
    Age CVI month wgt year 
0 16 2  1 NaN 1977 
1 16 3  2 NaN 1977 
2 16 2  3 NaN 1977 
3 16 7  4 NaN 1977 
4 16 3  5 NaN 1977 

または:

df2 = df1[L] 
df3 = df1[df1.columns.difference(pd.Index(L))] 
print (df2) 
    User_id day ZIP sex 
0  0 7 NaN M 
1  1 7 NaN M 
2  2 7 DM F 
3  3 7 DM M 
4  4 7 DM M 

print (df3) 
    Age CVI month wgt year 
0 16 2  1 NaN 1977 
1 16 3  2 NaN 1977 
2 16 2  3 NaN 1977 
3 16 7  4 NaN 1977 
4 16 3  5 NaN 1977 
1

あなたは試すことができます:Index.difference

df2 = df1[list] # it does a projection on the columns contained in the list 
df3 = df1[[col for col in df1.columns if col not in list]] 
+1

'df3 = df1 [[colがリストにない場合はdf1.columnのcolのcol]]'? – jezrael

1

を "リスト"

my_list= [u"User_id", u"day", u"ZIP", u"sex"] 
df2 = df1[df1.keys()[df1.keys().isin(my_list)]] 
としてリストに名前を付けることはありません
1

my_list= [u"User_id", u"day", u"ZIP", u"sex"] 
df2 = df1[df1.keys()[df1.keys().isin(my_list)]] 

または

df2 = df1[df1.columns[df1.columns.isin(my_list)]] 
関連する問題