我有一个熊猫数据框,如下所示:
import pandas as pd
import numpy as np
df = pd.DataFrame({'ORDER':["A", "A", "A", "A", "B","B"], 'A':[80, 23, np.nan, 60, 1,22], 'B': [80, 55, 5, 76, 67,np.nan]})
df
ORDER A B
0 A 80.0 80.0
1 A 23.0 55.0
2 A NaN 5.0
3 A 60.0 76.0
4 B 1.0 67.0
5 B 22.0 NaN
我要创建一列“新”,如下所示: 如果ORDER =='A',则new = df ['A'] 如果ORDER =='B',则new = df ['B']
这可以使用以下代码实现:
df['new'] = np.where(df['ORDER'] == 'A', df['A'], np.nan)
df['new'] = np.where(df['ORDER'] == 'B', df['B'], df['new'])
此处的调整是,如果ORDER的值不为“ B”,则数据框中将不存在B。因此,数据框可能如下所示。而且,如果我们在该数据框中使用上面的代码,则会出现错误,因为此数据框中缺少“ B”列。
ORDER A
0 A 80.0
1 A 23.0
2 A NaN
3 A 60.0
4 A 1.0
5 A 22.0
答案 0 :(得分:1)
使用DataFrame.lookup
,因此您不需要对df['B']
进行硬编码,但是它会查询列值:
df['new'] = df.lookup(df.index, df['ORDER'])
ORDER A B new
0 A 80.0 80.0 80.0
1 A 23.0 55.0 23.0
2 A NaN 5.0 NaN
3 A 60.0 76.0 60.0
4 B 1.0 67.0 67.0
5 B 22.0 NaN NaN