You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用if/elif/else与列最小值计算Pandas DataFrame新列?

Pandas DataFrame 一行代码实现col_4列计算

原始数据与预处理代码

a = [{'name': 'A', 'col_1': 5, 'col_2': 3, 'col_3': 1.5},
     {'name': 'B', 'col_1': 4, 'col_2': 2.5, 'col_3': None},
     {'name': 'C', 'col_1': 8, 'col_2': None, 'col_3': None},
     {'name': 'D', 'col_1': 7, 'col_2': 9, 'col_3': None}]
df = pd.DataFrame(a)
df['col_1'] = df['col_1'].fillna(0)
df['col_2'] = df['col_2'].fillna(0)
df['col_3'] = df['col_3'].fillna(0)
print(df)

执行后输出:

name  col_1  col_2  col_3
0    A    5.0    3.0    1.5
1    B    4.0    2.5    0.0
2    C    8.0    0.0    0.0
3    D    7.0    9.0    0.0

需求说明

现有尝试的一行代码仅对name为'A'和'B'的行有效,需补充完整逻辑:

  • 若col_3和col_2均为0,取col_1的25%(即col_1 * 0.25);
  • 对于name为'D'的行,先取col_1和col_2的最小值,再按规则计算(col_3不为0则取col_3,否则取该最小值的25%)。

完整一行代码实现

df['col_4'] = [i if i != 0 else (min(x, y) * 0.25 if n == 'D' else (y * 0.25 if x == 0 else x * 0.25)) for i, x, y, n in zip(df['col_3'], df['col_2'], df['col_1'], df['name'])]

最终结果

执行上述代码后,df的结果为:

name  col_1  col_2  col_3  col_4
0    A    5.0    3.0    1.5   1.50
1    B    4.0    2.5    0.0   0.625
2    C    8.0    0.0    0.0   2.00
3    D    7.0    9.0    0.0   1.75

逻辑说明

  • 优先判断col_3是否非0,满足则直接取col_3的值;
  • 若col_3为0,判断是否是name='D'的行,是则取col_1和col_2最小值的25%;
  • 若不是D行,再判断col_2是否为0,是则取col_1的25%,否则取col_2的25%。

内容的提问来源于stack exchange,提问作者LiAfe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:25:19