【问题标题】:Pandas not populating Column based on Condition熊猫不根据条件填充列
【发布时间】:2019-05-04 08:47:23
【问题描述】:

专家,

我遇到了 Pandas 的问题..

不确定为什么不满足以下条件。

df = pd.read_csv(path + filename, index_col='Date', parse_dates=True)
for i in range(1, len(signal)):

    if [(df['x'] < 2) & (df['y'] <= 0)]:
        listLongShort1.append("A_Condition")

# The other way around
    elif [(df['x'] > 3) & (df['y'] >= 1)]:
        listLongShort1.append("B_Condition")

    else:
        listLongShort1.append("No Condition")

它只是打印带有“A_Condition”的填充列,由于某种原因没有看到 elif 或其他。

您能告诉我我的代码有什么问题吗?

谢谢!!

【问题讨论】:

    标签: python-3.x dataframe pandas-datareader


    【解决方案1】:

    &amp; 是位运算符。 AND 是您要用于检查条件的运算符。

    if ((df['x'] < 2) and (df['y'] <= 0)):
        listLongShort1.append("A_Condition")
    elif ((df['x'] > 3) and (df['y'] >= 1)):
        listLongShort1.append("B_Condition")
    else:
        listLongShort1.append("No Condition")
    

    【讨论】:

    • 更正:AND 在 python 中不是正确的关键字,它是and
    【解决方案2】:

    python中的if条件是语句,所以用法是:

    if expression-here :
        # your body
    

    例子:

    if (df['x'] < 2) and (df['y'] <= 0):
        # whatever you want to do.
    

    根据您所做的,表达式位于列表中 ([]),其值始终为 TrueFalse,因此列表中的表达式始终为布尔值,因此始终为列表一个元素,它是python的if条件中的True

    即:

    if [False]: # always true
        # always get's executed
    

    if [True]: # always true
        # always get's executed
    

    只有当列表为空时才会传递为假,即:

    if []: # always false
        # doesn't get executed
    

    但由于在你的情况下这是不可能的,你面临着一个永远是“真相”的情况。

    【讨论】:

      猜你喜欢
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 2012-05-29
      • 2019-06-05
      相关资源
      最近更新 更多