【问题标题】:if statement between values of two pandas Dataframes两个熊猫数据框的值之间的 if 语句
【发布时间】:2018-11-22 12:10:53
【问题描述】:

我想用两个 pandas 数据框的值(我要比较的值在第 0 列)做一个 if 语句:

编辑:

首先我想检查df1的值大于df2的值的次数。

for row in df1:
    if df1[0] > df2[0]:
       Print('Ok')
    else:
       Print('not OK')

我得到的是:

ValueError:Series 的真值不明确。使用a.empty, a.bool()、a.item()、a.any() 或 a.all()。

第 2 条编辑:

由于我没有时间尝试您的所有建议,并且由于我需要一个快速的解决方案,因此我得到了以下结果:

excessLoadB1l=[]

indexYB1=loadC1C2B1.index.tolist()

tempLB1=energyBalanceB1['sumSupply_B1'].tolist()

for item in tempLB1:

    if item < 0:

        item=item

    else:

        item=0

    excessLoadB1l.append(item)

excessLoadB1=pd.DataFrame({'excessLoadB1':excessLoadB1l}).set_index([indexYB1])

我用正负值创建了一个列表

tempLB1=energyBalanceB1['sumSupply_B1'].tolist()

我想将其分成两个不同的 DataFrame。我借用了索引

indexYB1=loadC1C2B1.index.tolist()

对于正值:

excessSupplyB1l=[]

indexZB1=loadC1C2B1.index.tolist()

tempSB1=energyBalanceB1['sumSupply_B1'].tolist()

for item in tempSB1:

    if item > 0:

        item=item

    else:

        item=0

    excessSupplyB1l.append(item)


excessSupplyB1=pd.DataFrame({'excessSupplyB1':excessSupplyB1l}).set_index([indexZB1])

【问题讨论】:

  • 请注明do something和do something else代表什么,例如您是否正在根据您的情况创建一个新列?
  • 在 if 语句的基础上,我想合并另外两个数据帧,例如。 G。如果 df1[0] > df2[0] 的值合并 df3 和 df4 ...
  • 这很重要。我建议您将完整的minimal reproducible example 与小示例数据框放在一起。
  • 相关说明:DataFrames是dict-like,它们的key是列标签。所以如果你运行,例如for x in df: print(x),你看到的只是df的列名,没有数据。解决方案是循环使用for i, row in df.iterrows()
  • 会很高兴接受答案,甚至对给出的反应做出反应。人们已经努力帮助您。

标签: python pandas dataframe for-loop if-statement


【解决方案1】:

稍微快一点

for i, j in enumerate(df.itertuples()):
    if j[0] > df1[0].iloc[i]:
        print("OK")
    else:
        print("Not OK")

【讨论】:

  • 在这种情况下您不希望j[1] 检查这些值吗? ...if j[1] &gt; df1[0].iloc[i]:...
【解决方案2】:

不确定您在寻找什么。

如果您要比较来自不同数据框的单个列:

df1[0].gt(df2[0])

如果您将一个数据帧的所有列与另一个数据帧的单列进行比较:

df1.gt(df2[0], axis=0)

如果您要比较两个数据框中的所有列:

df1.gt(df2)

将此添加到上述任何一个以获得“Ok”和“not OK”而不是True,False:

.replace([1, 0], ['Ok', 'not OK'])

【讨论】:

    【解决方案3】:
    count = 0    
    
    for i, row in df1.iterrows():
        if row[0] > df2.loc[i,0]:
            print('Ok')
            count += 1
    
        else:
            print('not OK')
    
    print ('%d times item in df1 was greater than df2' %count)
    

    【讨论】:

      【解决方案4】:

      您可以合并两个数据框,然后使用 np.where 添加一列:

      df['result'] = np.where(df1['column1'] > df2['column2'], 'ok', 'not ok')
      

      +

      df[df.result == 'ok'].count()  
      

      另外,借用b2002;

      df_ = df1[0].gt(df2[0])
      (df_ == 1).sum()
      

      【讨论】:

        猜你喜欢
        • 2015-08-09
        • 1970-01-01
        • 2018-04-18
        • 1970-01-01
        • 2022-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多