如何基于另一DataFrame的条件为主DataFrame添加状态标识列?
实现DataFrame的id异常状态映射
数据情况
主数据DataFrame(固定位置):
id name 1 BEL 2 BEL 3 BEL 4 NYC 5 NYC 6 NYC 7 BER 8 BER
包含数值的DataFrame(行数更多):
id name value 1 BEL 9 2 BEL 7 3 BEL 3 4 NYC 76 5 NYC 76 6 NYC 23 7 BER 76 8 BER 2 3 BEL 7 4 NYC 5 5 NYC 4 6 NYC 2
需求
检查数值DataFrame中每个id是否存在value>10的记录,为主DataFrame添加is_ok列:
- 0:该id存在
value>10(异常) - 1:该id所有value都≤10(正常)
解决方案
步骤1:生成id的状态映射表
先对数值DataFrame按id分组,判断每组是否存在异常值,生成对应状态:
import pandas as pd # 定义两个DataFrame(实际场景可替换为读取数据的代码) main_df = pd.DataFrame({ 'id': [1,2,3,4,5,6,7,8], 'name': ['BEL','BEL','BEL','NYC','NYC','NYC','BER','BER'] }) value_df = pd.DataFrame({ 'id': [1,2,3,4,5,6,7,8,3,4,5,6], 'name': ['BEL','BEL','BEL','NYC','NYC','NYC','BER','BER','BEL','NYC','NYC','NYC'], 'value': [9,7,3,76,76,23,76,2,7,5,4,2] }) # 按id分组判断是否存在异常值,生成状态映射 id_status = value_df.groupby('id')['value'].apply(lambda x: 0 if (x > 10).any() else 1).reset_index(name='is_ok')
步骤2:合并到主DataFrame
将状态映射表与主DataFrame通过id关联,确保每个主数据的id都能匹配到对应状态:
result_df = main_df.merge(id_status, on='id', how='left')
最终结果
执行后得到的主DataFrame:
id name is_ok 0 1 BEL 1 1 2 BEL 1 2 3 BEL 1 3 4 NYC 0 4 5 NYC 0 5 6 NYC 0 6 7 BER 0 7 8 BER 1
内容的提问来源于stack exchange,提问作者user16511234
相关产品推荐
相关产品推荐

