在组上迭代(Python pandas数据帧)

2024-05-14 22:17:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想遍历按字符串或日期分组的组。

df = pd.DataFrame({'A': ['foo', 'bar'] * 3,
                   'B': ['me', 'you', 'me'] * 2,
                   'C': [5, 2, 3, 4, 6, 9]}) 
groups = df.groupby('A')

例如,在这段代码中,我有一个名为“foo”和“bar”的组,我可以使用循环遍历它们

for name, group in groups:
   print name

我的问题是我需要在这个循环中运行另一个循环,每次我需要调用不同的组集。like(假设组的大小为n)

for name,group in groups:
   for name1 in range(name, name + 9):  # + 9 to get first 9 groups for every iteration`

因为,name是一个字符串,我不能这么做。简而言之,我只想要一个方法,通过这个方法我可以通过数字访问组,这样我就可以轻松地调用所需的组进行计算。 有点像

groups = df.group('A')
for i in range(0,n):
    print group(i)[] + group(i+1)[]  

所以,如果我有以下组[g1,g2,g3,g4,g5],我想迭代地成对调用它们,比如[g1,g2],[g2,g3],[g3,g4]。。。。每次取两组级数的交集。我正在寻找通过索引或一些no来调用组[g1,g2,…g5]的方法,以便可以将它们用于循环操作。目前,我知道的调用组的唯一方法是通过组的名称,如上面的示例“foo”和“bar”中所述。 我想让电力来做如下操作:

for name,group in groups-1:
   print gb.get_group(name)
   print gb.get_group(name+1)

我知道这可能是一个简单的问题,但我已经为这个部分奋斗了一段时间。我希望能得到任何帮助。


Tags: 方法字符串nameindfforgetfoo
1条回答
网友
1楼 · 发布于 2024-05-14 22:17:26

.groupby()对象有一个.groups属性,该属性返回一个Python dict索引。在这种情况下:

In [26]: df = pd.DataFrame({'A': ['foo', 'bar'] * 3,
   ....:                    'B': ['me', 'you', 'me'] * 2,
   ....:                    'C': [5, 2, 3, 4, 6, 9]})

In [27]: groups = df.groupby('A')

In [28]: groups.groups
Out[28]: {'bar': [1L, 3L, 5L], 'foo': [0L, 2L, 4L]}

您可以按如下方式迭代:

keys = groups.groups.keys()
for index in range(0, len(keys) - 1):
    g1 = df.ix[groups.groups[keys[index]]]
    g2 = df.ix[groups.groups[keys[index + 1]]]
    # Do something with g1, g2

但是,请记住,使用for循环在Pandas对象上迭代通常比向量操作慢。根据你需要做什么,如果需要快速,你可能想尝试其他方法。

相关问题 更多 >

    热门问题