【问题标题】:Plot frequency of dataframe value per year每年绘制数据帧值的频率
【发布时间】:2020-03-29 21:30:20
【问题描述】:

我有一个数据框,其中包含 1990-2019 年 25 个不同地点的每小时温度数据。我想计算一个值高于或低于某个阈值的小时数,然后将该数量绘制为每年小时数的总和。我知道我可以使用条形图或直方图进行绘图,但不确定如何聚合数据来执行此任务。

数据框:

time                 Antwerp       Rotterdam  ...
1990-01-01 00:00:00  2             4          ...
1990-01-01 01:00:00  3             4          ...
1990-01-01 02:00:00  2             4          ...
...              

我需要使用 groupby 功能吗?

要演示的示例数据:

time                    Antwerp Rotterdam   Los Angeles
0   1990-01-01 00:00:00 0       2           15
1   1990-01-01 01:00:00 1       4           14
2   1990-01-01 02:00:00 3       5           15
3   1990-01-01 03:00:00 2       6           16

现在我正在寻找一个城市在 1990 年等于或小于 5 度的小时数。预期输出:

time    Antwerp Rotterdam   Los Angeles
1990    4       3           0

理想情况下,我希望能够选择我想要的任何温度值。

【问题讨论】:

  • 只需创建一个布尔列,如果阈值条件为 True,则该列为 True。然后你可以 groupby(year).sum 超过 bool col。

标签: python pandas dataframe


【解决方案1】:

我认为你需要DatetimeIndex,比较,例如大于DataFrame.gt,然后通过聚合sum 计算Trues 值:

df['time'] = pd.to_datetime(df['time'])
df = df.set_index('time')

N = 2
df = df.gt(N).groupby(df.index.year).sum()
print (df)
      Antwerp  Rotterdam
time                    
1990      0.0        1.0
1991      1.0        2.0

如果想要低或相等使用DataFrame.le:

N = 3
df = df.le(N).groupby(df.index.year).sum()
print (df)
      Antwerp  Rotterdam
time                    
1990      1.0        0.0
1991      2.0        0.0

【讨论】:

  • 我不确定这段代码在做什么。我希望能够计算每年低于或高于某个阈值的所有值。例如,在微型数据帧 sn-p 中,等于或低于 3 的计数对于安特卫普为 3,对于鹿特丹为 0。这有意义吗?
  • @EliTurasky - 你能创建一些具有预期输出的样本数据吗?谢谢
  • 我不明白 gt 或 le 是什么意思。这正在做我需要的!谢谢。
【解决方案2】:

这是不使用 pandas 函数的。

# get the time column as a list by timelist = list(df['time'])
def get_hour_ud(df, threshold):
    # timelist = list(df['time'])
    # df['time'] = ['1990-01-01 00:00:00', '1990-01-01 01:00:00', '1990-01-01 02:00:00'] # remove this line
    timelist = list(df['time'])
    hour_list = [int(a.split(' ')[1].split(':')[0]) for a in timelist]
    up_cnt = sum(a>threshold for a in hour_list)
    low_cnt = sum(a<threshold for a in hour_list)
    print(up_cnt)
    print(low_cnt)
    return up_cnt, low_cnt

【讨论】:

    猜你喜欢
    • 2019-04-14
    • 2014-05-25
    • 2020-10-13
    • 2018-02-01
    • 2016-07-11
    • 1970-01-01
    • 2019-06-10
    • 2020-01-20
    • 2018-01-03
    相关资源
    最近更新 更多