Pandas groupby将对象返回到数据框

时间:2014-02-21 23:54:14

标签: python pandas dataframe

所以我试图用一个二进制变量将一个pandas Dataframe分成两个独立的数据帧。因此,groupby函数似乎是一个不错的选择,除了它不返回数据帧,而是返回groupby对象,这对我来说几乎没用。而且,我无法访问groupby对象中的任何值。我运行了一个简单的df.groupby('Type')语句,并希望从这里对数据进行分区,这意味着将这两个组输出到两个新的数据帧。任何帮助将是真诚的感谢。我发布的最后一个问题遭到了荒谬的幼稚告诫,没有发布作业问题。毋庸置疑,这个以及前面提到的都不是功课,所以请不要这样做。一如既往地非常感谢。

2 个答案:

答案 0 :(得分:4)

如果您使用groupby,则可以按如下方式遍历组:

g = df.groupby('class')

for k, v in g.groups.iteritems():
    print k  # a
    print df.iloc[v]  # df_a, the dict values are position indices for the group
    print

a
  class     data1       data2
0     a -0.173070  141.437719
2     a -0.087673  200.815709
6     a  1.220608  159.456053
8     a  0.428373   -6.491034
9     a -0.123463  -96.898025

c
  class     data1       data2
5     c -0.358996  162.715982
7     c -1.339496   23.043417

b
  class     data1      data2
1     b -1.761652 -12.405066
3     b  1.366879  22.988654
4     b  1.125314  60.489373

注意:不能保证对set / dict进行迭代。

答案 1 :(得分:2)

这是怎么回事?

import numpy as np
import pandas as pd

np.random.seed(0)

df = pd.DataFrame({'class': np.random.choice(list('abc'), size=10),
                   'data1': np.random.randn(10),
                   'data2': np.random.randn(10) * 100})

df_a = df[df['class']=='a']
df_b = df[df['class']=='b']
df_c = df[df['class']=='c']

print df, '\n'

print df_a
print df_b
print df_c

给出:

  class     data1       data2
0     a -0.173070  141.437719
1     b -1.761652  -12.405066
2     a -0.087673  200.815709
3     b  1.366879   22.988654
4     b  1.125314   60.489373
5     c -0.358996  162.715982
6     a  1.220608  159.456053
7     c -1.339496   23.043417
8     a  0.428373   -6.491034
9     a -0.123463  -96.898025 

  class     data1       data2
0     a -0.173070  141.437719
2     a -0.087673  200.815709
6     a  1.220608  159.456053
8     a  0.428373   -6.491034
9     a -0.123463  -96.898025
  class     data1      data2
1     b -1.761652 -12.405066
3     b  1.366879  22.988654
4     b  1.125314  60.489373
  class     data1       data2
5     c -0.358996  162.715982
7     c -1.339496   23.043417