Python groupby并替换某些值

Python groupby并替换某些值,python,pandas,Python,Pandas,我想按id分组搜索注释,并用每个id下出现的注释替换与该id关联的所有行 我当前的逻辑是用模式值替换与id关联的所有行,但在某些情况下注释不是模式(nan是) 这是我的代码: file['name'] = file.groupby('data__id')['name'].apply(lambda x: x.fillna(x.mode())) 数据样本: data__id name 1 yes 1 2 2

我想按id分组搜索注释,并用每个id下出现的注释替换与该id关联的所有行

我当前的逻辑是用模式值替换与id关联的所有行,但在某些情况下注释不是模式(nan是)

这是我的代码:

file['name'] = file.groupby('data__id')['name'].apply(lambda x: x.fillna(x.mode()))
数据样本:

data__id      name
1              yes
1
2              
2               no
2 

此处的
模式
应返回多个值,因此请通过以下索引选择第一个值:

如果获得:

索引器错误:索引0超出大小为0的轴0的界限

如果
模式
返回空的
序列
,则使用
next
iter
返回默认值,因为组只包含缺少的值:

print (df)
   data__id name
0         1  yes
1         1  NaN
2         2  NaN
3         2   no
4         2  NaN
5         3  NaN

f = lambda x: x.fillna(next(iter(x.mode()), np.nan))
df['name'] = df.groupby('data__id')['name'].apply(f)
print (df)
   data__id name
0         1  yes
1         1  yes
2         2   no
3         2   no
4         2   no
5         3  NaN
或自定义值:

f = lambda x: x.fillna(next(iter(x.mode()), 'no match'))
df['name'] = df.groupby('data__id')['name'].apply(f)
print (df)
   data__id      name
0         1       yes
1         1       yes
2         2        no
3         2        no
4         2        no
5         3  no match

我建议使用
transform
而不是
apply

s=df.groupby('data__id')['name'].transform(lambda x: x.mode().iloc[0])
df.name.fillna(s,inplace=True)

您可以添加您的预期输出吗?
s=df.groupby('data__id')['name'].transform(lambda x: x.mode().iloc[0])
df.name.fillna(s,inplace=True)