Кадр данных Pandas объединяется с дубликатами, присвоенными определенному значению - PullRequest
1 голос
/ 27 июня 2019

У меня есть два кадра данных.

data1 = {'col4':['Tom', 'nick', 'krish', 'jack'],
        'col5':[20, 21, 19, 18]}
df1 = pd.DataFrame(data1)
     col4  col5                                                                                                                  
0    Tom    20                                                                                                                   
1   nick    21                                                                                                                   
2  krish    19                                                                                                                   
3   jack    18 


data2 = {'col1':['xxx', 'yyy', 'zzz', 'xxx','yyy', 'xxx', 'yyy', 'zzz'],
        'col2':['Tom', 'nick', 'krish', 'jack','Tom', 'nick', 'krish', 'jack'],
        'col3':[110, 121, 119, 118,141,156,176,186]}
df2 = pd.DataFrame(data2)
  col1   col2  col3                                                                                                              
0  xxx    Tom    110                                                                                                              
1  yyy   nick    121                                                                                                              
2  zzz  krish    119                                                                                                              
3  xxx   jack    118                                                                                                              
4  yyy    Tom    141                                                                                                              
5  xxx   nick    156                                                                                                              
6  yyy  krish    176                                                                                                              
7  zzz   jack    186

Мне нужно иметь col5 в моем фрейме данных df2 на основе col2 и col4.Значение col5 для повторяющихся значений в col2 должно быть присвоено 0, за исключением первого значения.Например, Tom повторяется, и только первое значение Tom (индекс 0) присваивается 20 после слияния с df1.Другое значение Tom должно быть 0 (индекс 4).
Я хочу, чтобы столбец результирующего информационного кадра был:

  col1   col2  col3  col5                                                                                                            
0  xxx    Tom   110   20                                                                                                           
1  yyy   nick   121   21                                                                                                          
2  zzz  krish   119   19                                                                                                           
3  xxx   jack   118   18                                                                                                           
4  yyy    Tom   141    0                                                                                                            
5  xxx   nick   156    0                                                                                                          
6  yyy  krish   176    0                                                                                                         
7  zzz   jack   186    0

Пожалуйста, помогите мне добиться этого.Заранее спасибо.

1 Ответ

2 голосов
/ 27 июня 2019

Объедините, а затем примените условие, используя np.where() и series.duplicated():

final = df2.merge(df1, how='left', left_on='col2', right_on='col4')
final.col5 = np.where(final.duplicated(['col2', 'col5']), 0, final.col5)
print(final)

  col1   col2  col3   col4  col5
0  xxx    Tom   110    Tom    20
1  yyy   nick   121   nick    21
2  zzz  krish   119  krish    19
3  xxx   jack   118   jack    18
4  yyy    Tom   141    Tom     0
5  xxx   nick   156   nick     0
6  yyy  krish   176  krish     0
7  zzz   jack   186   jack     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...