【问题标题】:Plotting histogram for column by grouping two column in pandas通过将熊猫中的两列分组来绘制列的直方图
【发布时间】:2019-03-08 14:33:34
【问题描述】:

我是 pandas 和 matplotlib 的新手。我有一个 csv 文件,其中包含从 2012 年到 2018 年的年份。对于一年中的每个月,我都有 Rain 数据。我想通过直方图进行分析,一年中哪个月降雨量最大。这是我的数据集。

year    month  Temp Rain
2012    1       10  100
2012    2       20  200
2012    3       30  300
..      ..      ..  ..
2012    12      40  400
2013    1       50  300
2013    2       60  200
..      ..      ..  ..
2018    12      70  400

我无法使用直方图进行绘图,我尝试使用条形图进行绘图,但没有得到想要的结果。这是我尝试过的:

import pandas as pd
import numpy as npy
import matplotlib.pyplot as plt
df2=pd.read_csv('Monthly.csv')
df2.groupby(['year','month'])['Rain'].count().plot(kind="bar",figsize=(20,10))

这是我得到的输出:

请建议我一种绘制直方图的方法,以分析按年份分组的月份发生的最大降雨量。

【问题讨论】:

  • 请不要将图像用于您的数据。复制并粘贴您的示例数据,以便我们进行复制。
  • @Chris,感谢您的建议。我更新了。

标签: python pandas numpy matplotlib


【解决方案1】:

您可能不想看到每个组的 count,但是

df2.groupby(['year','month'])['Rain'].first().plot(kind="bar",figsize=(20,10))

或许

df2.groupby(['month'])['Rain'].sum().plot(kind="bar",figsize=(20,10))

【讨论】:

  • 另一个选项:fig, ax = plt.subplots(figsize=(8,6)); df.groupby(['year','month']).sum()['Rain'].unstack().plot(kind='bar', ax=ax) 取决于您希望图表的外观。
【解决方案2】:

你没有办法解决,我会写:使用 max() 而不是 count()

df2.groupby(['year','month'])['Rain'].max().plot(kind="bar",figsize=(20,10))

【讨论】:

    【解决方案3】:

    你已经做了第一个肮脏的年份和月份,但只保持最大降雨量。

    series_df2 = df2.groupby(['year','month'], sort=False)['Rain'].max()
    

    然后解开系列,转置并绘制它。

    series_df2.unstack().T.plot(kind='bar', subplots=False, layout=(2,2))
    

    这将为您的示例数据提供如下所示的输出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-02
      • 2020-10-10
      • 2018-07-05
      • 2016-12-08
      • 2021-10-16
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多