панды - соответствие 2-х значений данных - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь найти соответствие со следующим 2 фреймом данных:

df_co:

Cntr No        Labour   Material    Amount  
BHCU 2604370    0.0      82.5       82.5    
BHCU 2604370    24.0     22.0       46.0    

ДФ:

Cntr No        Total    
BHCU 2604370    82.0    
BHCU 2604370    46.0

код:

    df['Tally'] = ((df_co['Cntr No'].isin(df['Cntr No'])) & 
                  ((df_co['Labour'].isin(df['Total'])) | 
                  (df_co['Material'].isin(df['Total'])) |
                  (df_co['Amount'].isin(df['Total'])))).map({True:'Yes',False:'No'})

Это не должно давать мне совпадения, так как df_co «Сумма» равна 82,5, а «Общая» сумма равна 82,00.

Но мой результат дает мне оба совпадения.

Результат:

Cntr No        Total     Tally
BHCU 2604370    82.0      Yes
BHCU 2604370    46.0      Yes

Подозреваю, что сравнение кодов неверно.

конвертировать в число с плавающей точкой:

 a = df.iloc[:, :5]
 b = df.iloc[:,5:29].apply(lambda x : 
 x.str.extract('(\d+)',expand=False).astype(float))
 c = df.iloc[:, 29:]
 df = pd.concat([a,b,c], axis=1)

1 Ответ

0 голосов
/ 02 мая 2018

Использование:

df = df.merge(df_co.melt('Cntr No', value_name='Total', var_name='Tally'), on=['Cntr No', 'Total'], how='left')
df['Tally'] = df['Tally'].notnull().map({True:'Yes',False:'No'})
print (df)
        Cntr No  Total Tally
0  BHCU 2604370   82.0    No
1  BHCU 2604370   46.0   Yes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...