我有2个dataframes TRAIN
和TEST
。我想加入,它含有没有了在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"
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