查找重复项并填充列
我有一个包含 2 列的数据框:name 和 id 在 name 列中我有几个重复项,在 id 列中我有一个重复项的空值我想要的是用第一次迭代的值填充该空值
例如:
df1=pd.DataFrame(columns=["name","id"])
df1["name"]=["a","b","c","a","d","e","b"]
df1["id"]=[1,2,3,"",4,5,""]
对于“a”和“b”的第二次迭代,我有一个空值我想要什么:
df1["id"]=[1,2,3,1,4,5,2]
如何用第一次迭代的值填充该空值?
回答
您可以将名称分组,.groupby()并通过获取每个组的第一个条目.transform('first')。然后用同名 group by 中的这些第一个条目替换空字符串.fillna(),如下所示:
df1['id'] = df1['id'].replace('', np.nan).fillna(df1.groupby('name')['id'].transform('first')).astype(int)
如果您的id列已经包含一些NaN值并且您不想触及这些值,您还可以使用值.mask()来有条件地替换空字符串groupby .transform('first')值,如下所示:
df1['id'] = df1['id'].mask(df1['id'] == '', df1.groupby('name')['id'].transform('first'))
结果:
print(df)
name id
0 a 1
1 b 2
2 c 3
3 a 1
4 d 4
5 e 5
6 b 2