查找重复项并填充列

时间:2021-06-03 09:42:46

标签: python pandas

我有一个 2 列的数据框:名称和 ID 在名称列中,我有几个重复项,在 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]

如何用第一次迭代的值填充该空值?

2 个答案:

答案 0 :(得分:6)

您可以按 .groupby() 对名称进行分组,并按 .transform('first') 获取每个组的第一个条目。然后用 .fillna() 替换同名组中的这些第一个条目的空字符串,如下所示:

df1['id'] = df1['id'].replace('', np.nan).fillna(df1.groupby('name')['id'].transform('first')).astype(int)

如果您的 id 列已经包含一些 NaN 值并且您不想触及这些值,您还可以使用 .mask() 有条件地将空字符串值替换为 { {1}} .transform('first') 值,如下所示:

groupby

结果:

df1['id'] = df1['id'].mask(df1['id'] == '', df1.groupby('name')['id'].transform('first'))

答案 1 :(得分:0)

更多groupby transform选项来自

np.where

df1['id'] = np.where(
    df1['id'].eq(''),
    df1.groupby('name')['id'].transform('first'),
    df1['id']
)

loc

df1.loc[df1['id'].eq(''), 'id'] = df1.groupby('name')['id'].transform('first')

df1

  name id
0    a  1
1    b  2
2    c  3
3    a  1
4    d  4
5    e  5
6    b  2