Я пытаюсь выполнить сверку / проверку, если два числа, одно без НДС и одно без НДС, равны общей сумме.

У меня есть следующие дф:

    Document Type   Factuurnummer   FactuurdatumKvK    ExclBTW   BTW        Totaal  Vervaldatum Item    Omschrijving    ... Betalingsvoorwaarden    Email   Postalcode_Finalp   Postalcodestringp   Cityp   Countryp    Postalcode_Final    Postalcodestring    City    Country
0   NaN 44  2021-02-27  58782494                       1700.00  357.00  2057.00 2021-03-13  

I've tried the following code:
#validation check
for i, row in df1.iterrows():
    if df1['Totaal'][i].astype('float') == (df1['ExclBTW'][i].astype('float') + df1['BTW'][i].astype('float')):
        df1['Totaal'].astype('float') == df1['Totaal'].astype('float')
    else:
        df1['Totaal'] = "ERROR!" 

Однако получение недопустимого значения ValueError ... Что, по вашему мнению, было бы лучшим, ребята?

--------------------------------------------------------------------------- AttributeError                            Traceback (most recent call last) <ipython-input-14-a461c3c9030f> in <module>
    113 #validation check
    114 for i, row in df1.iterrows():
--> 115     if df1['Totaal'][i].astype('float') == (df1['ExclBTW'][i].astype('float') + df1['BTW'][i].astype('float')):
    116         df1['Totaal'].astype('float') == df1['Totaal'].astype('float')
    117     else:

AttributeError: 'str' object has no attribute 'astype'

Пожалуйста помоги

1
Max 8 Мар 2021 в 19:47

2 ответа

Лучший ответ

Вы можете сделать это с помощью astype и apply:

df.loc[:, ['ExclBTW', 'BTW','Totaal']] = df[['ExclBTW', 'BTW','Totaal']].apply(lambda x: x.astype(float))

df['new_col'] = df[['ExclBTW', 'BTW','Totaal']].\
                  apply(lambda x: x['Totaal'] if x['Totaal'] == (x['ExclBTW'] + x['BTW']) else 'ERROR!', axis=1)
1
ashkangh 8 Мар 2021 в 17:09

Pandas позволяет выполнять эти операции в векторизованном виде

# have numpy for efficiency
import numpy as np

...
# assuming  no missing values
# np.where(condition, value_if_condition_true, value_if_condition_false, [default_value])

np.where(df1['Totaal'].astype('float') == (df1['ExclBTW'].astype('float') + df1['BTW'].astype('float')), True, False)
1
Prayson W. Daniel 8 Мар 2021 в 17:12