python - pandas 查找每个组中满足特定条件的行的索引并将值分配给这些行
问题描述
我有一个df
,
name_id name
1 a
2 b
2 b
3 c
3 c
3 c
现在我想groupby
name_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
解决方案
transform
与 一起使用loc
:
df.loc[df.groupby('name_id')['name_id'].transform('size') == 1, 'name_id'] = -1
替代方案是numpy.where
:
df['name_id'] = np.where(df.groupby('name_id')['name_id'].transform('size') == 1,
-1, df['name_id'])
print (df)
name_id name
0 -1 a
1 2 b
2 2 b
3 3 c
4 3 c
5 3 c
此外,如果想要测试重复使用duplicated
:
df['name_id'] = np.where(df.duplicated('name_id', keep=False), df['name_id'], -1)
推荐阅读
- c++ - 未定义对数字的 vtable 的引用
- python - 对同一变量进行两次测量的卡尔曼滤波器 (pykalman)
- c# - 如何禁用 Web 应用程序公共端的注册?
- c++ - 带指针的整数数组和字符数组
- c# - 如何制作一个以一秒延迟响应请求的方法 Asp.net core
- excel - 订单导出文件不显示换行符
- google-chrome - 定义 Chrome DevTools 窗口的默认宽度
- authentication - 使用颤振 twitter_login 包的问题
- excel - 是否可以从 csv 写入现有的 Excel 文件而不关闭它?
- python - Iterate in dictionary for value that matches the first 5 numbers in a filename