使用pandas按条件调整DataFrame中Indicator列取值的咨询
实现方案
直接对已生成初始Indicator列的outputdata按规则分条件修改值即可,完整可运行代码如下:
import pandas as pd indata2 = [[2, 'SIS X+', 9.65, 'Q'], [2, 'SIS X-', 5.32, 'Q'], [2, 'SIS Y+', 8.24, 'Q'], [2, 'SIS Y-', 3.27, 'Q'], [2, 'SIS', 3.40, 'Q'], [2, 'C. VIV', 0.23, 'L'], [2, 'SOBRE P', 0.38, 'SD'], [2, 'SOBRE P', 0.19, 'SD'], [2, 'VIEN X+', 7.36, 'W'], [2, 'VIEN X-', 23.09, 'W'], [2, 'VIEN Y+', 6.66, 'W'], [2, 'VIEN Y-', 2.68, 'W'], [4, 'SIS X+', 14.41, 'Q'], [4, 'SIS X-', 12.23, 'Q'], [4, 'SIS Y+', 10.00, 'Q'], [4, 'SIS Y-', 11.00, 'Q'], [4, 'C. VIV', 0.38, 'L'], [4, 'C. VIV', 0.34, 'L'], [4, 'C. VIV', 0.13, 'L'], [4, 'SOBRE P', 0.62, 'SD'], [4, 'VIEN X+', 29.21, 'W'], [4, 'VIEN X-', 8.70, 'W'], [4, 'VIEN Y-', 7.46, 'W'], [4, 'VIEN Y+', 11.62, 'W'], [4, 'VIEN', 9.6, 'W']] indata2 = pd.DataFrame(data = indata2, columns = ['KeyData', 'Text', 'AvgAbs', 'Label']) # 生成初始Indicator列 l = indata2.Label.unique() m = pd.DataFrame(l, columns = ['Label']) m['Indicator'] = m.index + 1 outputdata = indata2.merge(m[['Indicator','Label']],'left') # 调整Indicator列的核心代码 # 筛选Label为Q、W的行 mask_qw = outputdata['Label'].isin(['Q', 'W']) # Text含X的Q/W行,Indicator加0.1 outputdata.loc[mask_qw & outputdata['Text'].str.contains('X'), 'Indicator'] += 0.1 # Text含Y的Q/W行,Indicator加0.2 outputdata.loc[mask_qw & outputdata['Text'].str.contains('Y'), 'Indicator'] += 0.2 # Text不含X/Y的Q/W行,Indicator设为0 mask_no_xy = mask_qw & ~outputdata['Text'].str.contains('X|Y') outputdata.loc[mask_no_xy, 'Indicator'] = 0
运行后输出的outputdata与你提供的预期结果完全匹配。
内容的提问来源于stack exchange,提问作者DaniV
相关产品推荐
相关产品推荐

