如何根据ID的房间服务情况按条件替换DataFrame列值?
解决方案:按ID批量替换房间号列值
没问题,我来帮你搞定这个需求!核心思路是先判断每个ID是否服务过9、10、11号房间,再统一替换该ID对应的所有房间号值。下面是两种实用的实现方式:
方法一:先提取目标ID集合,再映射替换
这种方法先筛选出符合条件的ID,再通过映射完成替换,适合数据量较大的场景,执行效率更高。
import pandas as pd # 1. 构造示例数据(替换成你自己的DataFrame即可) data = { 'first_columns': [1, 1, 2, 2, 3, 3, 4], 'second_columns': [8, 9, 10, 12, 7, 8, 11] } df = pd.DataFrame(data) # 2. 定义需要检查的目标房间号 target_rooms = {9, 10, 11} # 3. 获取所有曾服务过目标房间的ID ids_with_target = df[df['second_columns'].isin(target_rooms)]['first_columns'].unique() # 4. 替换second_columns的值:目标ID对应的替换为0,其余替换为1 df['second_columns'] = df['first_columns'].apply(lambda x: 0 if x in ids_with_target else 1)
方法二:用groupby + transform直接处理
这种方法更直观,通过分组后对每个ID组进行判断,代码简洁且逻辑清晰,适合快速实现需求。
import pandas as pd # 构造示例数据 data = { 'first_columns': [1, 1, 2, 2, 3, 3, 4], 'second_columns': [8, 9, 10, 12, 7, 8, 11] } df = pd.DataFrame(data) target_rooms = {9, 10, 11} # 分组后对每个组的房间号列进行判断,返回对应替换值 df['second_columns'] = df.groupby('first_columns')['second_columns'].transform( lambda group: 0 if group.isin(target_rooms).any() else 1 )
处理后结果示例
两种方法执行后,DataFrame都会输出如下结果:
| first_columns | second_columns |
|---|---|
| 1 | 0 |
| 1 | 0 |
| 2 | 0 |
| 2 | 0 |
| 3 | 1 |
| 3 | 1 |
| 4 | 0 |
你可以根据自己的数据集大小和使用习惯选择合适的方法~
内容的提问来源于stack exchange,提问作者Imran Ahmad Ghazali
相关产品推荐
相关产品推荐

