![](/img/trans.png)
[英]How to fill empty column values with another dataframe's value if two other columns have matching values in Pandas?
[英]fill up empty values with same value of another column in pandas dataframe
我有一个如下所示的熊猫数据框:
如何为空单元格填充相同产品类型的相同策略编号?
任何建议将不胜感激。 谢谢
抱歉,我现在要添加示例数据框:
sample = [{'POLICY NUMBER':'','PRODUCT TYPE':'MED'},{'POLICY NUMBER':'','PRODUCT TYPE':'MED'},{'POLICY NUMBER':'433M49763' ,'PRODUCT TYPE':'MED'},{'POLICY NUMBER':'433M86968','PRODUCT TYPE':'MED'},{'POLICY NUMBER':'','PRODUCT TYPE':'TED'}, {'POLICY NUMBER':'566D158635','PRODUCT TYPE':'TED'},{'POLICY NUMBER':'655D158635','PRODUCT TYPE':'TED'},{'POLICY NUMBER':'789D158635', 'PRODUCT TYPE':'TED'}]
pd.DataFrame(样本)
请注意,空单元格中也包含“”,它们在整个数据框中都不是NaN
添加到上面的问题。 如果我有如上所述的更改的数据帧。 我如何到达以下数据框:
如果每个组只有一个相同类别并且没有数据,则为空string
s:
df['POLICY NUMBER'] = (df.groupby('PRODUCT TYPE')['POLICY NUMBER']
.transform(lambda x: x[x != ''].iat[0]))
print (df)
POLICY NUMBER PRODUCT TYPE
0 433M86968 MED
1 433M86968 MED
2 433M86968 MED
3 433M86968 MED
4 566D158635 TED
5 566D158635 TED
6 566D158635 TED
7 566D158635 TED
或者,如果可能的话,并非总是空wtrailing whitespaces
,但有时会有wtrailing whitespaces
,需要使用strip
:
df['POLICY NUMBER'] = (df['POLICY NUMBER'].str.strip().groupby(df['PRODUCT TYPE'])
.transform(lambda x: x[x != ''].iat[0]))
print (df)
POLICY NUMBER PRODUCT TYPE
0 433M86968 MED
1 433M86968 MED
2 433M86968 MED
3 433M86968 MED
4 566D158635 TED
5 566D158635 TED
6 566D158635 TED
7 566D158635 TED
排序和转换last
值的解决方案:
df['POLICY NUMBER'] = (df.sort_values(['PRODUCT TYPE','POLICY NUMBER'])
.groupby('PRODUCT TYPE')['POLICY NUMBER']
.transform('last'))
print (df)
POLICY NUMBER PRODUCT TYPE
0 433M86968 MED
1 433M86968 MED
2 433M86968 MED
3 433M86968 MED
4 566D158635 TED
5 566D158635 TED
6 566D158635 TED
7 566D158635 TED
编辑:您需要用NaN
替换空字符串,然后使用bfill
进行反向向前填充NaN
,而ffill
进行向前填充NaNs:
df['POLICY NUMBER'] = (df['POLICY NUMBER'].str.strip()
.replace('',np.nan)
.groupby(df['PRODUCT TYPE'])
.transform(lambda x: x.bfill().ffill()))
print (df)
POLICY NUMBER PRODUCT TYPE
0 433M49763 MED
1 433M49763 MED
2 433M49763 MED
3 433M86968 MED
4 566D158635 TED
5 566D158635 TED
6 566D158635 TED
7 789D158635 TED
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.