如何在for循环中对数据帧执行逻辑运算?

时间:2018-07-19 00:42:12

标签: python python-2.7 pandas logical-operators

我有4个数据框,所有数据框都有一列,ID

我使用这一行代码将所有4个合并为一个df:

frame = [df1, df2, df3, df4]

df_final = reduce(lambda left,right: pd.merge(left,right,on='ID'), frame)

现在,我想遍历df_final,但仅在ID等于1的情况下循环,然后将出现在API中的行插入。

我创建了以下代码以尝试:

for i in df_final:
    if df_final.loc[df_final['ID'] == 1]:
        df_final_1 = df_final.loc[df_final['SID'] == 1]
        data = {
        'token': 'xxx',
        'number':  df_final_1.number,
        'ID':df_final_1.ID + df_final.ID2,
        'link':df_final_1.URL,
        }
        r = requests.post(url,headers=headers,params=data)
    else:
        print('fail')

我不断收到错误消息:

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我知道这与循环中的这些代码行有关,但是不确定:

 if df_final.loc[df_final['ID'] == 1]:
        df_final_1 = df_final.loc[df_final['ID'] == 1]

理想情况下,我不想创建另一个数据框来保存我尝试从df_final中派生出来的值

1 个答案:

答案 0 :(得分:1)

AlarmManager alarmMgr = (AlarmManager)activity.getSystemService(Context.ALARM_SERVICE); 返回一个if( alarmMgr != null ) { alarmMgr.setExact(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis() + (120 * 1000), alarmIntent); } ,其中包含df_final.loc[df_final['ID'] == 1]的行,而不是布尔值。由于这会产生仅包含您想要的行的框架,因此只需使用DataFrame对其进行迭代:

'ID' == 1