Python pandas查找每个组中满足特定条件的行的索引,并为这些行赋值
我有一个Python pandas查找每个组中满足特定条件的行的索引,并为这些行赋值,python,python-3.x,pandas,dataframe,pandas-groupby,Python,Python 3.x,Pandas,Dataframe,Pandas Groupby,我有一个df name_id name 1 a 2 b 2 b 3 c 3 c 3 c name_id name -1 a 2 b 2 b 3 c 3 c 3 c 现在我想groupbyname\u id并将-1分配给组中长度为1或
df
name_id name
1 a
2 b
2 b
3 c
3 c
3 c
name_id name
-1 a
2 b
2 b
3 c
3 c
3 c
现在我想groupby
name\u id
并将-1
分配给组中长度为1或<2的行
one_occurrence_indices = df.groupby('name_id').filter(lambda x: len(x) == 1).index.tolist()
for index in one_occurrence_indices:
df.loc[index, 'name_id'] = -1
我想知道做这件事最好的方法是什么。因此结果df
name_id name
1 a
2 b
2 b
3 c
3 c
3 c
name_id name
-1 a
2 b
2 b
3 c
3 c
3 c
与loc一起使用
:
df.loc[df.groupby('name_id')['name_id'].transform('size') == 1, 'name_id'] = -1
备选方案是:
此外,如果需要测试副本,请使用:
使用:
使用:
lens=df.groupby('name_id')['name'].transform(len)
df['name_id'].遮罩(镜头<2,-1,在位=真)
打印(df)
姓名
0-1 a
1.2 b
2 b
3 c
4.3 c
5.3 c
df.name_id*=(df.groupby('name_id').name.transform(len)==1).map({True:-1,False:1})
df
Out[50]:
name_id name
0 -1 a
1 2 b
2 2 b
3 3 c
4 3 c
5 3 c
lens = df.groupby('name_id')['name'].transform(len)
df['name_id'].mask(lens < 2, -1, inplace=True)
print(df)
name_id name
0 -1 a
1 2 b
2 2 b
3 3 c
4 3 c
5 3 c