添加缺少的功能,数据帧

问题描述 投票:0回答:1

我有2个dataframes TRAINTEST。我想加入,它含有没有了在TRAIN但不是在TEST项目(Y2,Y3)的信息来改变TRAIN

TRAIN = pd.DataFrame({'X' : [1,1,1,1,1,2,2,2,2,2],
                      'Y1': [1,1,1,1,1,1,0,0,0,0],
                      'Y4': [1,1,0,0,0,0,0,0,0,0]})

TEST  = pd.DataFrame({'X' : [1,1,1,1,1,2,2,2,2],
                      'Y1': [1,1,0,1,0,1,0,0,0],
                      'Y2': [1,0,1,0,1,0,1,0,1],
                      'Y3': [1,1,0,1,1,0,0,0,0],
                      'Y4': [1,1,0,1,1,0,0,0,0]})

我想要:

TRAIN = pd.DataFrame({'X' : [1,1,1,1,1,2,2,2,2,2],
                      'Y1': [1,1,1,1,1,1,0,0,0,0],
                      'Y4': [1,1,1,1,1,1,0,0,0,0],
                      'Y2': [0,0,0,0,0,0,0,0,0,0],
                      'Y3': [0,0,0,0,0,0,0,0,0,0]})

我试过了:

L_TRAIN = list(TRAIN)
L_TEST  = list(TEST)

def Diff(li1, li2): 
    li_dif = [i for i in li1 + li2 if i not in li1] 
    return li_dif

L_DIFF  = Diff(L_TRAIN, L_TEST)

TRAIN[L_DIFF] = 0

但得到:

KeyError: "['Y2' 'Y3'] not in index"
python pandas dataframe
1个回答
2
投票

pandas不支持值分配给多列,所以你需要通过一个遍历它之一:

import pandas as pd 

TRAIN = pd.DataFrame({'X' : [1,1,1,1,1,2,2,2,2,2],
                      'Y1': [1,1,1,1,1,1,0,0,0,0],
                      'Y4': [1,1,0,0,0,0,0,0,0,0]})

TEST  = pd.DataFrame({'X' : [1,1,1,1,1,2,2,2,2],
                      'Y1': [1,1,0,1,0,1,0,0,0],
                      'Y2': [1,0,1,0,1,0,1,0,1],
                      'Y3': [1,1,0,1,1,0,0,0,0],
                      'Y4': [1,1,0,1,1,0,0,0,0]})


diff_cols = set(TEST.columns)-set(TRAIN.columns)

for i in diff_cols:
    TRAIN[i] = 0

print(TRAIN)

输出:

   X  Y1  Y4  Y2  Y3                                                                                                                  
0  1   1   1   0   0                                                                                                                  
1  1   1   1   0   0                                                                                                                  
2  1   1   0   0   0                                                                                                                  
3  1   1   0   0   0                                                                                                                  
4  1   1   0   0   0                                                                                                                  
5  2   1   0   0   0                                                                                                                  
6  2   0   0   0   0 
© www.soinside.com 2019 - 2024. All rights reserved.