Панды: как объединить кадры данных на нескольких столбцах? - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть 2 кадра данных, df1 и df2.

df1 Содержит информацию о некоторых взаимодействиях между людьми.

df1
     Name1   Name2 
0    Jack    John   
1    Sarah   Jack   
2    Sarah   Eva    
3    Eva     Tom    
4    Eva     John   

df2 Содержит статус обычных людей, а также некоторых людей в df1

df2
     Name     Y 
0    Jack     0   
1    John     1   
2    Sarah    0       
3    Tom      1 
4    Laura    0

Я хотел бы df2 только для людей, которые в df1 (Лора исчезает), а для тех, кто не в df2, оставьте NaN (т. Е. Еву), таких как:

df2
     Name     Y 
0    Jack     0   
1    John     1   
2    Sarah    0       
3    Tom      1 
4    Eva     NaN

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Вы можете создать список уникальных имен в df1 и использовать isin

names = np.unique(df1[['Name1', 'Name2']].values.ravel())
df2.loc[~df2['Name'].isin(names), 'Y'] = np.nan

    Name    Y
0   Jack    0.0
1   John    1.0
2   Sarah   0.0
3   Tom     1.0
4   Laura   NaN
0 голосов
/ 15 ноября 2018

Создайте DataFrame для уникальных значений df1 и map с df2 как:

df = pd.DataFrame(np.unique(df1.values),columns=['Name'])
df['Y'] = df.Name.map(df2.set_index('Name')['Y'])

print(df)
    Name    Y
0    Eva  NaN
1   Jack  0.0
2   John  1.0
3  Sarah  0.0
4    Tom  1.0

Примечание: Порядок не сохраняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...