【问题标题】:Python - For loop If statment not evaluatingPython - For 循环 If 语句未评估
【发布时间】:2018-03-05 02:19:11
【问题描述】:

我正在尝试在数据框中创建一个具有以下逻辑的新列:

如果 A 列大于零,则使用 A 列。否则,使用 B 列。当我运行该函数时,它看起来只是 else 子句为真。但是,A 列中有明显大于零的值。我觉得这里缺少一些基本的东西,但是我的互联网搜索没有发现任何富有成果的东西,或者我的新生 python 技能对我来说并不明显。

def master_value():
  for i, row in data_all.iterrows():     
    if data_all[row['column A']] > 0: 
        data_all[row['New Column']] = data_all[row['Column A']]
    else:
        data_all[row['New Column']] = data_all[row['Column B']]
return data_all

提前谢谢你。

【问题讨论】:

  • 确定a列的数据是整数吗?
  • 欢迎堆栈溢出!您能给我们举一个输入和预期输出的例子吗?
  • column AColumn A 是两个不同的字符串。
  • 首先,我听说这是一个很棒的开发者社区,但不到 24 小时内的回复给我留下了深刻的印象。谢谢你,我期待着在我了解更多信息后回馈。 @ 23k - 是的,这些列是整数:这是 info() 输出: cust_id 9175 non-null int64 column A 8310 non-null float64 column B 974 non-null float64 to Ken - 抱歉,我忘记了 Python 关心大小写。在我的代码中,列的大小写正确,但感谢您指出这一点作为注意。

标签: python pandas loops


【解决方案1】:

遍历行会起作用,但使用numpy.where() 会快得多

data_all['New Column'] = np.where(data_all['Column A'] > 0, data_all['Column A'], data_all['Column B'])

【讨论】:

  • 工作就像一个魅力。谢谢!如果你有时间 - 我很想知道你为什么认为我的原始代码失败了。谢谢!
  • 我认为在循环的第一个 if 语句中,row['column A'] 是一个整数,而 pandas 不知道如何处理括号中的整数 data_all[0]。它正在寻找列名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
相关资源
最近更新 更多