【问题标题】:How do I visualize number of records against other column in pandas我如何可视化熊猫中其他列的记录数
【发布时间】:2019-12-10 10:40:39
【问题描述】:

我正在研究如下道路事故数据集

df = pd.DataFrame(data={'accident_id': ['A1', 'A2', 'A3', 'A4','A5', 'A6'],
                        'accident_county': ['abc', 'xyz', 'abc', 'abc', 'xyz', 'lmn'],
                        'population': [100000, 6000, 100000, 100000, 6000, 9000],
                        'income':  [11200, 78000, 11200, 11200, 78000, 28000]})


accident_id        accident_county    population    income
   A1                 abc               100000       11200
   A2                 xyz               6000         78000
   A3                 abc               100000       11200
   A4                 abc               100000       11200
   A5                 xyz               6000         78000
   A6                 lmn               9000         28000

我想绘制图表,以便我可以分析特定县发生的事故数量以及该县的人口和收入情况,试图找出与人口数量和收入是否有任何相关性。

事故的数量可以通过记录的数量找到,但我不知道如何找到一个县的计数并将其与该县的人口和收入进行比较。

【问题讨论】:

  • 你能告诉我们你到目前为止尝试了什么吗?请检查How to ask和How to create a Minimal, Reproducible Example
  • 您是否尝试过使用.groupby?
  • 如果您有事故日期,则将一年中的事故数量、平均人口和一年的收入相加,然后按人口或收入列升序排列生成的时间数据并绘制 XY 图的那种关系。如果存在具有相同人口/收入金额的重复项,您可能需要对事故数量进行二阶平均,从而导致事故计数不同。

标签: python pandas matplotlib data-visualization


【解决方案1】:

您可以调用 .groupby() 并传递要分组的列的名称。 就像在 SQL 中一样

SELECT COUNT(accident_id)
FROM COLUMN NAME
GROUP BY accident_county 

在python数据框中:

abc = df.groupby("accident_county ")["accident_id"].count()

【讨论】:

    【解决方案2】:

    我理解相同的accident_county 将具有相同的population 和income,每个accident_id。因此,这可能适合您的需要

    import matplotlib.pyplot as plt
    
    df = pd.DataFrame(data={'accident_id': ['A1', 'A2', 'A3', 'A4','A5', 'A6'],
                        'accident_county': ['abc', 'xyz', 'abc', 'abc', 'xyz', 'lmn'],
                        'population': [100000, 6000, 100000, 100000, 6000, 9000],
                        'income':  [11200, 78000, 11200, 11200, 78000, 28000]})
    
    df = df.groupby('accident_county').agg({'accident_id':'count',
                                           'population':'max',
                                           'income':'max'})
    df.rename(columns={'accident_id':'accident_number'}, inplace=True)
    
    df[['population', 'income']].plot()
    df['accident_number'].plot(legend=True, secondary_y=True)
    
    plt.show()
    

    【讨论】:

    • 嗨@FBruzzesi,谢谢你的回复。当我运行上面的示例代码时,我得到“ ”而不是上面的图表
    • 这可能取决于您使用的编辑器,尝试添加以下导入:import matplotlib.pyplot as plt 并在最后调用 plt.show()。我会在上面的代码中添加它们
    • 它有效,但事故编号是一条水平直线,这是我使用真实数据集运行时,它有 3000 多个县。知道是什么原因造成的。与上面的示例不同,左侧的数字呈指数增长,为 20000,40000...
    • 您可以尝试在数据框绘图方法中添加参数 logy=True,这将产生 y 轴的对数缩放。
    【解决方案3】:

    使用groupby:

    df.set_index('accident_county', inplace=True)
    df.groupby('accident_county')['population'].plot(legend=True)
    

    【讨论】:

      猜你喜欢
      • 2020-10-01
      • 2021-08-12
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      • 2023-02-17
      • 2019-08-13
      • 2022-11-02
      • 2020-10-21
      相关资源
      最近更新 更多