如何迭代具有多个条件的多个数据集?

How to iterate through multiple datasets with multiple conditions?

我正在尝试使用包含多个条件的计算来遍历多个数据集,但我收到一条错误消息。我可以遍历多个列表,但它似乎不适用于数据框。

我已将一个巨大的数据集(最初来自 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 或 d,则对这些数据集执行其他计算。 但是,我收到以下 ValueError 消息:

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

我之前遇到过这个问题,尝试在比较之前对索引进行排序,尝试像这样更改实现:

A = []
B = []

for df in (a,b,c,d):
    if ((df.sort_index(inplace=True) == a.sort_index(inplace=True)) | (df.sort_index(inplace=True) == b.sort_index(inplace=True))):
        k = 1
        A.append(k)
    elif ((df.sort_index(inplace=True) == c.sort_index(inplace=True)) | (df.sort_index(inplace=True) == d.sort_index(inplace=True))):
        k = 2
        B.append(k)

你可以这样做:

for df in (a,b,c,d):    
    if df.equals(a) or df.equals(b):
        k = 1
        A.append(k)
    elif df.equals(c) or df.equals(d):
        k = 2
        B.append(k) 

equals() 要求元素与其他 Series 或 DataFrame 中的各自元素具有相同的数据类型。但是,列标签不需要具有相同的类型,只要它们仍然被视为相等即可。