使用pandas中的另一个数据框快速切片数据帧

时间:2016-07-15 18:01:13

标签: python pandas dataframe

我在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,我该如何完成这项任务?

1 个答案:

答案 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一起使用不是问题,因为所有内容都在内部转换为数组。