Python DataFrame 根据多列条件添加新列

Python DataFrame add a new columns based on multiple columns condition

我想根据“指标”列中的最后一个字母添加一个名为 XXX 的新列,如果:

指标以 S 结尾 -> 使用 'Vendor 5 Ask Price XXX'

中的值

指标以 B 结尾 -> 使用 'Vendor 5 Bid Price XXX'

中的值

因此新列将是:XXX:[100,nan,107,103]

df = {'indicator': ['45346B','24536S','34636S','657363B'],
'Vendor 5 Bid Price XXX' : [100,None,102,103],
'Vendor 5 Ask Price XXX' : [105,None,107,108]}

pd.DataFrame(df)

  indicator  Vendor 5 Bid Price XXX  Vendor 5 Ask Price XXX
0    45346B                   100.0                   105.0
1    24536S                     NaN                     NaN
2    34636S                   102.0                   107.0
3   657363B                   103.0                   108.0

假设indicator列仅以BS结尾,您可以使用numpy.where,如果指标以[结尾则使用Bid Price =13=],否则 Ask Price:

df['XXX'] = np.where(df['indicator'].str.endswith('B'), df['Vendor 5 Bid Price XXX'], df['Vendor 5 Ask Price XXX'])

输出:

  indicator  Vendor 5 Bid Price XXX  Vendor 5 Ask Price XXX    XXX
0    45346B                   100.0                   105.0  100.0
1    24536S                     NaN                     NaN    NaN
2    34636S                   102.0                   107.0  107.0
3   657363B                   103.0                   108.0  103.0

怎么样

df[‘XXX’] = df.apply(
    lambda row: row[‘Vendor 5 Ask Price XXX’] if row[‘indicator’].ends with(‘S’) else row[‘Vendor 5 Bid Price XXX’],
    axis=1
)

.apply(…, axis=1) 会将函数应用于每一行。 lambda 函数只是您提到的开关逻辑的实现,如果需要可以更复杂。