Pandas DataFrame子集筛选与多列累计运算生成标识列实现
Pandas实现代码
完整可运行的实现逻辑如下:
import pandas as pd # 构造示例数据集 df = pd.DataFrame({ 'unit': ['ABC', 'DEF', 'GEH','IJK','DEF','XRF','BRQ'], 'A': [1,1,1,0,0,0,1], 'B': [1,1,1,1,1,1,0], 'C': [1,1,1,0,0,0,1], 'row_num': [7,6,5,4,3,2,1] }) # 1. 筛选row_num <=4的子集,加copy避免链式索引警告 df_sub = df[df['row_num'] <= 4].copy() # 2. 统计A、B、C三列1的占比 calc_cols = ['A', 'B', 'C'] total_1 = df_sub[calc_cols].sum().sum() # 两次sum分别完成列维度求和、全局总1数统计 total_count = df_sub[calc_cols].size # 总元素个数,样例中为4行*3列=12 ratio = total_1 / total_count # 3. 按规则赋值flag列 if ratio >= 0.4: df_sub['flag'] = 1 elif ratio < 0.1: df_sub['flag'] = 0 # 注:占比在10%~40%区间的规则未明确,可自行补充对应分支逻辑 # 结果验证 print(f"1的占比:{ratio:.2%}") print(df_sub)
运行后输出的1占比为41.67%,符合>=40%的条件,最终子集所有行的flag列都会赋值为1。
内容的提问来源于stack exchange,提问作者HKE
相关产品推荐
相关产品推荐

