使用 groupby 和 size 方法制表数据框

Tabulate data frame with groupby and size methods

我有一个 Pandas 数据框,out,我正在计算列的计数,cityraingarden 使用 以下系列:

out.groupby(['city','raingarden']).size() 输出

city raingarden 55405 True 3 Edina True 7 MInneapolis True 8 Minneapolis False 2482 True 847 Minneapolis False 2 True 1 Minneapolis, True 1 Minneapolis, False 2 Minneapolsi False 5 True 3 Minnepolis False 4 Minnespolis False 4 Minnetonka False 1 True 2 Minnneapolis False 5 Mpla True 3 Mpls False 22 True 20 Mpls. False 8 True 17 NE Mpls True 6 Richfield True 1 SLP True 3 St Louis Park True 2 St. Louis Park False 1 Victoria False 1 Wayzata False 2 True 1 minneapolis False 3 mpls True 2 dtype: int64

我想把它输出到tabulatetable。

为此,我执行了以下操作:

headers = ['city','has rain garden', 'n']
print tabulate(out.groupby(['city','raingarden']).size().to_frame(), headers, tablefmt="simple")

问题 1:我需要获得计数的列名,但一直没有成功;

问题 2(可能与问题 1 有关),输出如下所示:

city                          has rain garden
--------------------------  -----------------
(u'55405', True)                            3
(u'Edina', True)                            7
(u'MInneapolis', True)                      8
(u'Minneapolis', False)                  2482
(u'Minneapolis', True)                    847
(u'Minneapolis ', False)                    2
(u'Minneapolis ', True)                     1
(u'Minneapolis,', True)                     1
(u'Minneapolis, ', False)                   2
(u'Minneapolsi', False)                     5
(u'Minneapolsi', True)                      3
(u'Minnepolis', False)                      4
(u'Minnespolis', False)                     4
(u'Minnetonka', False)                      1
(u'Minnetonka', True)                       2
(u'Minnneapolis', False)                    5
(u'Mpla', True)                             3
(u'Mpls', False)                           22
(u'Mpls', True)                            20
(u'Mpls.', False)                           8
(u'Mpls.', True)                           17
(u'NE Mpls', True)                          6
(u'Richfield', True)                        1
(u'SLP', True)                              3
(u'St Louis Park', True)                    2
(u'St. Louis Park', False)                  1
(u'Victoria', False)                        1
(u'Wayzata', False)                         2
(u'Wayzata', True)                          1
(u'minneapolis', False)                     3
(u'mpls', True)                             2

前两列作为元组给出?因此,我如何将它们拆分成单独的列,以及如何为我的计数添加标签?我确信我要实现的目标应该比我尝试的要简单得多。

通过两列摸索,您正在创建一个多级索引 Series,我相信这不是您想要的。我不确定原始数据的样子(在问题中提供 out.head() 会很好),但我相信您正在寻找的是:

out.groupby('city').sum()['raingarden']

下面是一些随机生成的数据的示例:

import random
import string
import pandas as pd
import numpy as np

city = random.sample(string.lowercase*500,100)
raingarden = np.random.randint(0,10,100)

out = pd.DataFrame({'city':city, 'raingarden':raingarden})

输出:

In [30]: out.groupby('city').sum()['raingarden']
Out[30]:
city
a    17
b     7
c    16
d     8
e    24
f    28
g    16
h    49
i    29
j    24
k     4
l     5
m    17
n    29
p    22
q    14
r    19
s     6
t    21
u     8
v    18
w    25
x    11
y     9
z    40
Name: raingarden, dtype: int64