【问题标题】:Select between values in 2 columns based on a conditional in third column in pandas根据熊猫第三列中的条件在两列中的值之间进行选择
【发布时间】:2018-03-12 15:46:19
【问题描述】:
如何使用 pandas 根据第三列中的条件在两列之间进行选择?
在 excel 中我会使用类似的东西:
NEW_COLUMN = IF(条件 == TRUE,第 1 列,第 2 列)。我无法使用 lambda 函数。
【问题讨论】:
-
如果我或其他答案有帮助,请不要忘记accept 它 - 单击答案旁边的复选标记 (v) 将其从灰色切换为已填充。谢谢。
标签:
python
pandas
if-statement
lambda
【解决方案1】:
使用numpy.where:
df['NEW_COLUMN'] = np.where(CONDITION, df['COLUMN 1'] , df['COLUMN 2'])
示例:
df = pd.DataFrame({'COL':[4,5,4],
'COLUMN 1':[7,8,9],
'COLUMN 2':[1,3,5],})
df['NEW_COLUMN'] = np.where(df['COL'] == 4, df['COLUMN 1'] , df['COLUMN 2'])
print (df)
COL COLUMN 1 COLUMN 2 NEW_COLUMN
0 4 7 1 7
1 5 8 3 3
2 4 9 5 9
【解决方案2】:
你可以使用Series.where()方法:
In [251]: df['NEW_COLUMN'] = df['COLUMN 1'].where(df['COL']==4, df['COLUMN 2'])
In [252]: df
Out[252]:
COL COLUMN 1 COLUMN 2 NEW_COLUMN
0 4 7 1 7
1 5 8 3 3
2 4 9 5 9
【解决方案3】:
我的偏好是设置您的默认列值,然后根据您的情况使用.loc 访问器进行更新。
来自@jezrael 的数据。
df['NEW_COLUMN'] = df['COLUMN 2']
df.loc[df['COL'] == 4, 'NEW_COLUMN'] = df['COLUMN 1']
# COL COLUMN 1 COLUMN 2 NEW_COLUMN
# 0 4 7 1 7
# 1 5 8 3 3
# 2 4 9 5 9