如何根据列值填充所有值?

2024-06-26 08:27:42 发布

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

假设您拥有以下df:

dffinalselection

        description#1   description#2 lacheck   taxrate#1
    0   NaN             NaN           5           Res
    1   138.81         105.91         67          Rofus
    12  74.16           4.34          55          Rennie

现在,我想根据lacheck/taxrate#1的组合值填充说明#1和#2。这需要以迭代和可伸缩的方式完成,因为描述可能长达十个

因此,我们编写了以下代码

dffinalselection['LineDescription'] = dffinalselection['lacheck'] + "-" + dffinalselection['taxrate#1'] 

filldescparty = dffinalselection.filter(like='description')

df[filldescparty].fillna(dffinalselection['LineDescription'], inplace = True)

dffinalselection.update(filldescparty)

但是,获取以下错误:

ValueError: Boolean array expected for the condition, not object

期望输出:

        description#1   description#2 lacheck   taxrate#1
    0   5 -Res          5 -Res            5           Res
    1   67 - Res        67 - Res         67       Rofus
    12  55 - Rennie     55 - Rennie       55      Rennie

Tags: 代码df方式resdescriptionnanfilterlike
2条回答

使用ffill的另一种方法

import numpy as np

df.loc[:,df.columns.str.contains('description')] = np.nan
s = df.loc[:,~df.columns.str.contains('description')
                       ].astype(str).agg('-'.join,1).to_frame('vals')

new = s.join(df).ffill(axis=1).drop('vals',1)

   description#1 description#2 lacheck taxrate#1
0          5-Res         5-Res       5       Res
1       67-Rofus      67-Rofus      67     Rofus
12     55-Rennie     55-Rennie      55    Rennie

我们可以试试assign

line = df['lacheck'].astype(str) + '-' + df['taxrate#1']
cols = df.filter(like='description')

df.assign(**dict.fromkeys(cols, line))

   description#1 description#2  lacheck taxrate#1
0          5-Res         5-Res        5       Res
1       67-Rofus      67-Rofus       67     Rofus
12     55-Rennie     55-Rennie       55    Rennie

相关问题 更多 >