如何迭代具有多个条件的多个数据集?
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 中的各自元素具有相同的数据类型。但是,列标签不需要具有相同的类型,只要它们仍然被视为相等即可。
我正在尝试使用包含多个条件的计算来遍历多个数据集,但我收到一条错误消息。我可以遍历多个列表,但它似乎不适用于数据框。
我已将一个巨大的数据集(最初来自 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 中的各自元素具有相同的数据类型。但是,列标签不需要具有相同的类型,只要它们仍然被视为相等即可。