【发布时间】:2019-08-05 14:34:33
【问题描述】:
我正在尝试使用包含多个条件的计算迭代多个数据集,但我收到一条错误消息。我可以遍历多个列表,但它似乎不适用于数据框。
我已将一个巨大的数据集(最初来自 HDF5 文件)划分为具有相同列但用于不同建筑类型的较小数据集。现在我想遍历每个数据集来做同样的计算。计算也包括多个代码。
import pandas as pd
import numpy as np
from pandas import DataFrame
# Multiple datasets:
d1 = {'apples1': [45,2,15,0,39,6,12,7,86,24],
'feathers1': [2,1,0,3,4,2,2,1,0,1]}
a = DataFrame(d1,columns=['apples1','feathers1'])
d2 = {'apples2': [2,52,1,27,1,5,1,28,2],
'feathers2': [4,2,1,1,0,1,2,1,4]}
b = DataFrame(d2,columns=['apples2','feathers2'])
d3 = {'apples3': [12,5,1,23,1],
'feathers3': [4,4,1,1,1]}
c = DataFrame(d3,columns=['apples3','feathers3'])
d4 = {'apples4': [82,53,17,28,10,5,16],
'feathers4': [0,5,1,3,1,2,4]}
d = DataFrame(d3,columns=['apples4','feathers4'])
# Calculation iteration through all datasets:
A = []
B = []
for df in (a,b,c,d):
if ((df == a) | (df == b)).any(axis=1):
k = 1
A.append(k)
elif ((df == c) | (df == d)).any(axis=1):
k = 2
B.append(k)
如果数据框 (df) 是 a OR b,则对这些数据集执行以下计算;或者,如果数据集是 c OR d,则对这些数据集执行其他计算。 但是,我收到以下 ValueError 消息:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
【问题讨论】:
-
((df == a) | (df == b)).any(axis=1)产生一系列布尔值,length等于您拥有的行数。例如如果您有 4 行,则可以评估为True, False, True, True。现在,您如何解释if [True, False, True, True]?你可能想要((df == a) | (df == b)).any(axis=1).any() -
嗨@rafaelc!当我按照您的建议进行操作时,我收到另一条错误消息:ValueError:只能比较标记相同的 DataFrame 对象
-
那是因为你有不同的列名。您如何比较具有不同标签(索引或列)的数据框? ;)
-
这看起来像一个奇怪的设计,看起来像一个 XY 问题。如果我是你,我会发布你的实际问题,即你真正想要实现的目标,而不是 如何解决这个特定的解决方案!
-
@rafaelc 您是否建议我将列名更改为所有相同的名称?
标签: python pandas dataframe iteration multiple-conditions