Python groupby并替换某些值
我想按id分组搜索注释,并用每个id下出现的注释替换与该id关联的所有行 我当前的逻辑是用模式值替换与id关联的所有行,但在某些情况下注释不是模式(nan是) 这是我的代码: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
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)