Max
Max

Reputation: 471

How to fill all values based on column value?

Imagine you have the following 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

Now I would like to fill description#1 and #2 based on the values combined of lacheck / taxrate#1. This needs to be done iteratively and scalable because descriptions may be up to ten long.

So fabricated the following code.

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

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

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

dffinalselection.update(filldescparty)

However, getting the following error:

ValueError: Boolean array expected for the condition, not object

desired output:

        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

Upvotes: 2

Views: 169

Answers (2)

Umar.H
Umar.H

Reputation: 23099

another way using 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

Upvotes: 1

Shubham Sharma
Shubham Sharma

Reputation: 71689

We can try 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

Upvotes: 2

Related Questions