[英]How to fill all values based on column value?
Imagine you have the following df:假设您有以下 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.现在我想根据 lacheck / taxrate#1 的组合值来填充 description#1 和 #2。 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
We can try assign
我们可以尝试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
another way using ffill
使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.