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
列仅以B
或S
结尾,您可以使用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 函数只是您提到的开关逻辑的实现,如果需要可以更复杂。
我想根据“指标”列中的最后一个字母添加一个名为 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
列仅以B
或S
结尾,您可以使用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 函数只是您提到的开关逻辑的实现,如果需要可以更复杂。