如何根据其他两列填写nan值?

2024-09-29 21:54:07 发布

您现在位置:Python中文网/ 问答频道 /正文

假设您有以下df:

     VAT       taxrate#1    taxrate#2    taxrate#3    taxrate#4    ExclVAT
--  -------  -----------  -----------  -----------  -----------  ---------
 0    19.95           21          nan          nan          nan      95
 2     0               0            0            0          nan     nan
 6     3.15          nan           21          nan          nan      15
 9   125.34           21          nan          nan          nan     596.86
11   540.69           21          nan          nan          nan    2574.73
13   254.31           21          nan          nan          nan    1211
15  1378.94          nan          nan          nan          nan    6566.36
18   401.65          nan          nan          nan          nan    1912.6
20    58.84          nan          nan          nan          nan     264.18
22    17.85           21          nan          nan          nan      85
24    16.38           21           21           21          nan      77.98
28   252              21           21          nan          nan    1200
31     6.24           21          nan          nan          nan      29.73
33    60.9            21           21          nan          nan     290
36    60.9            21           21          nan          nan     290
39    75.6            21           21          nan          nan     360

我需要的代码,计算增值税金额,如果所有的税率值是南

增值税可以计算并插入税率#1。增值税可以是21%、9%或0%

如何做到这一点

期望输出:

     VAT       taxrate#1    taxrate#2    taxrate#3    taxrate#4    ExclVAT
--  -------  -----------  -----------  -----------  -----------  ---------
 0    19.95           21          nan          nan          nan      95
 2     0               0            0            0          nan     nan
 6     3.15          nan           21          nan          nan      15
 9   125.34           21          nan          nan          nan     596.86
11   540.69           21          nan          nan          nan    2574.73
13   254.31           21          nan          nan          nan    1211
15  1378.94           21          nan          nan          nan    6566.36
18   401.65           21          nan          nan          nan    1912.6
20    58.84          nan          nan          nan          nan     264.18
22    17.85           21          nan          nan          nan      85
24    16.38           21           21           21          nan      77.98
28   252              21           21          nan          nan    1200
31     6.24           21          nan          nan          nan      29.73
33    60.9            21           21          nan          nan     290
36    60.9            21           21          nan          nan     290
39    75.6            21           21          nan          nan     360

我尝试了以下代码:

cols_to_check = ['taxrate#1', 'taxrate#2','taxrate#3']
dftaxitems['is_na'] = dftaxitems[cols_to_check].isnull().apply(lambda x: all(x), axis=1) 
dftaxitems

for i, row in dftaxitems.iterrows():
    if dftaxitems['is_na'][i] == True:
        dftaxitems['taxrate#1'] = dftaxitems['taxrate#1'].fillna((dftaxitems['BTW'].astype(float) / dftaxitems['ExclBTW'].astype(float)) * 100)
        
def custom_round(x, base=3):
    return int(base * round(float(x)/base))
dftaxitems['taxrate#1'] = dftaxitems['taxrate#1'].apply(lambda x: custom_round(x, base=3))
dftaxitems

但是,这将导致不舍入到21、9或0,否则为np.nan

我希望计算出的数值正好是21,9或0,否则是np.nan

现在,代码将四舍五入到最近的3 w/o表,查看该值与21、9或0的接近程度

我的问题是: 当增值税除以不含增值税时,如何将21%、9%或0%分配给税率#1,以计算增值税百分比并将其添加到税率#1

抱歉,如果这一切都有点不连贯,我已经工作太久了。 请帮忙


Tags: to代码baseischecknanfloat增值税
1条回答
网友
1楼 · 发布于 2024-09-29 21:54:07

以下是我对这项工作的假设

  1. 仅在taxrate#1为空时更新taxrate#1中的值
  2. ExclVATVAT中的所有值都将具有值。如果值为NaN或0,则必须扩展条件以检查它们
  3. VAT/ExclVAT将为taxrate#1提供%。不需要进行额外的计算调整

如果我们同意这些假设,那么您可以通过以下方式实现:

df['taxrate#1'] = df.apply(lambda x: round((x['VAT'] / x['ExclVAT']),2)*100 if pd.isnull(x['taxrate#1']) else x['taxrate#1'], axis=1).astype(int)

一旦我对方法有了更清晰的了解,并且如果您希望修改增值税价值或不包括增值税价值,那么可以更改代码来解决它

此操作的输出将是(PS:I保留ID列以供参考):

    id      VAT  taxrate#1  taxrate#2  taxrate#3  taxrate#4  ExclVAT
0    0    19.95         21        NaN        NaN        NaN    95.00
1    2     0.00          0        0.0        0.0        NaN      NaN
2    6     3.15         21       21.0        NaN        NaN    15.00
3    9   125.34         21        NaN        NaN        NaN   596.86
4   11   540.69         21        NaN        NaN        NaN  2574.73
5   13   254.31         21        NaN        NaN        NaN  1211.00
6   15  1378.94         21        NaN        NaN        NaN  6566.36
7   18   401.65         21        NaN        NaN        NaN  1912.60
8   20    58.84         22        NaN        NaN        NaN   264.18
9   22    17.85         21        NaN        NaN        NaN    85.00
10  24    16.38         21       21.0       21.0        NaN    77.98
11  28   252.00         21       21.0        NaN        NaN  1200.00
12  31     6.24         21        NaN        NaN        NaN    29.73
13  33    60.90         21       21.0        NaN        NaN   290.00
14  36    60.90         21       21.0        NaN        NaN   290.00
15  39    75.60         21       21.0        NaN        NaN   360.00

如果您想强制执行增值税税率,您可以决定执行以下操作:

df['taxrate#Y'] = df.apply(lambda x: round((x['VAT'] / x['ExclVAT']),2)*100 if not (pd.isnull(x['ExclVAT']) or pd.isnull(x['VAT'])) else 0, axis=1).astype(int)

df.loc[df['taxrate#Y'] > 15, 'taxrate#Y'] = 21
df.loc[(df['taxrate#Y'] > 0) & (df['taxrate#Y'] <= 15), 'taxrate#Y'] = 9

这与我之前发布的解决方案相比。我已经创建了一个新列taxrate#X。代码是相同的,但我将其分配到新列,而不是将其写回taxrate#1

df['taxrate#X'] = df.apply(lambda x: round((x['VAT'] / x['ExclVAT']),2)*100 if pd.isnull(x['taxrate#1']) else x['taxrate#1'], axis=1).astype(int)

其输出将为:

    id      VAT  taxrate#1  taxrate#2  ...  taxrate#4  ExclVAT  taxrate#X  taxrate#Y
0    0    19.95       21.0        NaN  ...        NaN    95.00         21         21
1    2     0.00        0.0        0.0  ...        NaN      NaN          0          0
2    6     3.15        NaN       21.0  ...        NaN    15.00         21         21
3    9   125.34       21.0        NaN  ...        NaN   596.86         21         21
4   11   540.69       21.0        NaN  ...        NaN  2574.73         21         21
5   13   254.31       21.0        NaN  ...        NaN  1211.00         21         21
6   15  1378.94        NaN        NaN  ...        NaN  6566.36         21         21
7   18   401.65        NaN        NaN  ...        NaN  1912.60         21         21
8   20    58.84        NaN        NaN  ...        NaN   264.18         22         21
9   22    17.85       21.0        NaN  ...        NaN    85.00         21         21
10  24    16.38       21.0       21.0  ...        NaN    77.98         21         21
11  28   252.00       21.0       21.0  ...        NaN  1200.00         21         21
12  31     6.24       21.0        NaN  ...        NaN    29.73         21         21
13  33    60.90       21.0       21.0  ...        NaN   290.00         21         21
14  36    60.90       21.0       21.0  ...        NaN   290.00         21         21
15  39    75.60       21.0       21.0  ...        NaN   360.00         21         21

请注意,我没有基于taxrate#Y值修改VATExclVAT值。如果需要,我们可以进行计算并相应调整美元。同样,我们需要更清楚地了解哪些方面需要调整VATExclVAT

相关问题 更多 >

    热门问题