如何在熊猫中按两列分组

时间:2019-08-06 04:44:58

标签: pandas-groupby

我有以下数据。我有超过10万条记录,所以它是一个大文件,而我只显示其中的一部分。

将熊猫作为pd导入 df1 = pd.DataFrame(data) 打印(df1)

   ADDRESS        |    ID  |     DATE     | VIOLATIONS
0  7738 S WESTERN | CHI065 |   2014-07-08 |        65
1  1111 N HUMBOLDT| CHI010 |   2014-07-16 |         56
2  5520 S WESTERN | CHI069 |   2014-07-08 |         10
3  1111 N HUMBOLDT| CHI010 |   2014-07-26 |        101
4  1111 N HUMBOLDT| CHI010 |   2014-07-27 |         92
5  5529 S WESTERN | CHI068 |   2014-08-03 |         20

Q1。我需要计算每天每个摄像机发出的平均违规次数吗? Q2。引用最多的是一周的哪一天? Q3在收集期间,活动摄像机的数量是否增加或减少。

我仍然停留在第一个。我可以按日期平均收到违规情况。输出如下所示

df1.groupby('DATE')。VIOLATIONS.mean()

DATE       |
2014-07-01 |  52.168421
2014-07-02 |   43.228261
2014-07-03 |  51.617021
2014-07-04 |   59.596774
2014-07-05 |   55.380952
2014-07-06 |   59.983333
2014-07-07 |   49.237113

但是当我通过添加ID对其进行更改时,它给了我错误。

df1.groupby(['DATE','ID'])。VIOLATIONS.mean()

帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:0)

  1. 不确定所收到的错误是什么,但是以您的示例为例,以下应该起作用。
In [1]: df = pd.DataFrame([["7738 S WESTERN", "CHI065", "2014-07-08", 65],
                           ["1111 N HUMBOLDT", "CHI010","2014-07-16", 56],
                           ["5520 S WESTERN", "CHI069", "2014-07-08", 10],
                           ["1111 N HUMBOLDT", "CHI010", "2014-07-26", 101],
                           ["1111 N HUMBOLDT", "CHI010", "2014-07-27", 92],
                           ["5529 S WESTERN", "CHI068", "2014-08-03", 20]], 
                           columns = ["ADDRESS", "ID", "DATE", "VIOLATIONS"])

然后,以下内容将为您提供所需的答案。

In [2]: df.groupby(['DATE', 'ID'])['VIOLATIONS'].mean()

Out[2]:        DATE      ID    
         2014-07-08  CHI065     65
                     CHI069     10
         2014-07-16  CHI010     56
         2014-07-26  CHI010    101
         2014-07-27  CHI010     92
         2014-08-03  CHI068     20
  1. 确定所有地址的违规次数最多的日期。
df['DATE'] = pd.to_datetime(df['DATE'])
df['DAY_OF_WEEK'] = df['DATE'].dt.weekday_name

df.groupby('DAY_OF_WEEK').sum().idxmax().to_string(index=False)

收益

'Sunday'