我想打印用Pandas分组的结果。

我有一个数据框架:

import pandas as pd
df = pd.DataFrame({'A': ['one', 'one', 'two', 'three', 'three', 'one'], 'B': range(6)})
print(df)

       A  B
0    one  0
1    one  1
2    two  2
3  three  3
4  three  4
5    one  5

当按“A”分组后打印时,我有以下内容:

print(df.groupby('A'))

<pandas.core.groupby.DataFrameGroupBy object at 0x05416E90>

如何打印分组的数据框架?

如果我这样做:

print(df.groupby('A').head())

我获得的数据帧好像它没有分组:

             A  B
A                
one   0    one  0
      1    one  1
two   2    two  2
three 3  three  3
      4  three  4
one   5    one  5

我期待的是:

             A  B
A                
one   0    one  0
      1    one  1
      5    one  5
two   2    two  2
three 3  three  3
      4  three  4

当前回答

你只需要将DataFrameGroupBy对象转换为列表,你可以简单地打印它。 ls_grouped_df = list(df.groupby('A')) 打印(ls_grouped_df)

其他回答

另外,其他简单的选择可以是:

gb = df.groupby("A")
gb.count() # or,
gb.get_group(your_key)

除了之前的答案:

以你为例,

df = pd.DataFrame({'A': ['one', 'one', 'two', 'three', 'three', 'one'], 'B': range(6)})

然后是简单的一行代码

df.groupby('A').apply(print)

为Groupby对象分配一个变量并使用.first()方法。例子:

 a = df_apps_clean[['App', 'Installs']].groupby('Installs')
 a.first()  <----

只是做的事:

grouped_df = df.groupby('A')

for key, item in grouped_df:
    print(grouped_df.get_group(key), "\n\n")

弃用通知:ix在0.20.0中已弃用

这也是可行的,

grouped_df = df.groupby('A')    
gb = grouped_df.groups

for key, values in gb.iteritems():
    print(df.ix[values], "\n\n")

对于选择性键分组:使用gb.keys()将您想要的键插入到key_list_from_gb,在下面:

gb = grouped_df.groups
gb.keys()

key_list_from_gb = [key1, key2, key3]

for key, values in gb.items():
    if key in key_list_from_gb:
        print(df.ix[values], "\n")

这是一个更好的通用答案。此函数将打印所有组名和值,或可选地选择一个或多个组进行显示。

def print_pd_groupby(X, grp=None):
    '''Display contents of a Panda groupby object
    :param X: Pandas groupby object
    :param grp: a list with one or more group names
    '''
    if grp is None:
        for k,i in X:
            print("group:", k)
            print(i)
    else:
        for j in grp:
            print("group:", j)
            print(X.get_group(j))

在您的示例案例中,下面是会话输出

In [116]: df = pd.DataFrame({'A': ['one', 'one', 'two', 'three', 'three', 'one'], 'B': range(6)})

In [117]: dfg = df.groupby('A')

In [118]: print_pd_groupby(dfg)
group: one
     A  B
0  one  0
1  one  1
5  one  5
group: three
       A  B
3  three  3
4  three  4
group: two
     A  B
2  two  2

In [119]: print_pd_groupby(dfg, grp = ["one", "two"])
group: one
     A  B
0  one  0
1  one  1
5  one  5
group: two
     A  B
2  two  2

这是一个更好的答案,因为函数是可重用的内容,把它放在你的包或函数集合中,永远不要重新编写那种“脚本化”的方法。

恕我直言,类似这样的东西应该是熊猫组的内置方法。