我在pandas中有两个数据帧。 DF“A”包含区域名称的起始和结束索引。 DF“B”包含子区域的起始和结束索引。目标是提取所有区域的所有子区域。
示例:
A:
start index | end index | zone name
-----------------------------------
1 | 10 | X
B:
start index | end index | subzone name
-----------------------------------
2 | 3 | Y
在上面的例子中,Y是X的子区,因为它的索引属于X的索引。
我目前正在这样做的方法是使用iterrows遍历A中的每一行,并且对于每一行(区域),我在B(子区域)中找到切片。 这种解决方案在大熊猫中非常慢,因为它不会很快。如果不在熊猫中使用iterrows,我该如何完成这项任务?
答案 0 :(得分:0)
可以按字典和系列进行分组, 分组信息可能以数组以外的形式存在。让我们考虑另一个 示例DataFrame(由于您的数据框架中没有数据,所以我要用自己的DF DFA =映射,DFB =人们 具有价值观并且具有现实世界的解释):
people = pd.DataFrame(np.random.randn(5, 5),
columns=['a', 'b', 'c', 'd', 'e'],
index=['Joe', 'Steve', 'Wes', 'Jim', 'Travis'])
people.iloc[2:3, [1, 2]] = np.nan # Add a few NA values
现在,假设我对各列有一个组对应关系,并且想要求和 按组将列合并在一起:
mapping = {'a': 'red', 'b': 'red', 'c': 'blue',
'd': 'blue', 'e': 'red', 'f' : 'orange'}
#Mapping is a Dictionary just like a DataFrame (DF A representing Zones)
您可以根据此字典构造一个数组以传递给groupby,但是我们 可以通过dict(我确定您可以将Dictionary转换为dtata Frame,将Data Frame转换为Dictionary,所以跳过这一步,否则,您最好在评论中提问)
by_column = people.groupby(mapping, axis=1)
我正在使用sum()运算符,您可以使用任何想要的运算符(如果要将子区域与父区域合并,可以通过级联来完成此操作,否则我会详细介绍)
by_column.sum()
Series具有相同的功能,可以将其视为固定大小的映射:
注意:将函数与数组,字典或Series一起使用不是问题,因为所有内容都在内部转换为数组。