使用groupby函数在Pandas中使用For循环

时间:2017-12-07 17:09:57

标签: python pandas loops for-loop

unGrouped是一个如下所示的数据框:

         date        borough
969609  01/01/2014       BROOKLYN
967983  01/01/2014          BRONX
967982  01/01/2014         QUEENS
865943  01/01/2014       BROOKLYN
967981  01/01/2014      MANHATTAN
967980  01/01/2014       BROOKLYN
967979  01/01/2014         QUEENS
967984  01/01/2014          BRONX
967978  01/01/2014         QUEENS
967976  01/01/2014       BROOKLYN
967975  01/01/2014       BROOKLYN

我有以下代码:

for row in unGrouped:
if unGrouped['borough'][row]=='BRONX':
    bronxCount+=1
    print bronxCount

它给了我一个关键错误:date。 我希望遍历列borough,只要遇到bronxCount就递增BRONX,并将该值存储在名为`bronxCount'的列中的每一行,以最终获得计数每天在布朗克斯犯罪。如果有人能让这个循环工作,我会非常感激。谢谢您的帮助!

4 个答案:

答案 0 :(得分:2)

您可以在过滤后总结:

>>> (unGrouped.borough == 'BRONX').sum()
2

要计算每个日期的计数,只需按日期和计算前计算:

>>> unGrouped.groupby(['date', 'borough']).size()
date        borough  
01/01/2014  BRONX        2
            BROOKLYN     5
            MANHATTAN    1
            QUEENS       3
dtype: int64

或者您只希望BRONX使用日期索引。

>>> unGrouped.groupby(['borough', 'date']).size().loc['BRONX']
date
01/01/2014    2
dtype: int64

答案 1 :(得分:1)

一般来说,如果你使用for循环,你可能做错了!

你可能想要的是groupby和count?

unGrouped.groupBy('borough').size()

答案 2 :(得分:0)

使用values_counts

bronxCount = unGrouped.borough.value_counts()['BRONX']
print(BronxCount)

输出:

2

答案 3 :(得分:0)

使用numpy

v, n = np.unique(df.borough.values, return_counts=True)
d=dict(zip(v, n))
d['BRONX']
Out[218]: 2