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