【问题标题】:how to groupby two columns in Pandas如何在熊猫中按两列分组
【发布时间】:2019-08-06 22:47:58
【问题描述】:

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

将熊猫导入为 pd df1 = pd.DataFrame(数据) 打印(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

第一季度。我需要计算出每台摄像机每天发出的平均违规次数? 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()

帮助将不胜感激!谢谢!

【问题讨论】:

  • 你遇到了什么错误?
  • KeyError Traceback (最近一次调用最后一次) in 2 import pandas as pd 3 df1 = pd.DataFrame(data) ----> 4 df1 .groupby(['DATE', 'ID']).VIOLATIONS.mean() 当我尝试添加“ID”时它不喜欢它

标签: pandas-groupby


【解决方案1】:
  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'

【讨论】:

  • 我是初学者,如何在我的数据列表中添加列?这就是我现在所拥有的: import pandas as pd df1=pd.DataFrame(data) - 数据在一个大的 csv 文件中。谢谢!
  • 不确定我是否关注。您指的是哪个数据列表?你是说DataFrame吗?
  • 哦,所以您实际上还没有 DataFrame?
  • 看看this
  • import pandas as pd df1 = pd.DataFrame(data) 这就是我所拥有的,所以在您的示例中,您添加了列名 columns = ["ADDRESS", "ID", "DATE", " VIOLATIONS"]) 如何将其添加到我的数据中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-03
  • 2022-11-10
  • 2016-07-07
  • 1970-01-01
  • 2016-08-05
  • 2017-12-30
  • 1970-01-01
相关资源
最近更新 更多