按日期分隔数据框并计算数学模型 Numpy Python

Posted

技术标签:

【中文标题】按日期分隔数据框并计算数学模型 Numpy Python【英文标题】:Separating a dataframe by date and calculating mathmetical models Numpy Python 【发布时间】:2021-09-15 23:18:50 【问题描述】:

data_listmonthly_values数组相互关联,所以数据点'2019-09-01 00:00:00'= 15 , 2019-10-01 00:00:00'= 39.6... etc。下面的year_changes 函数显示了发生新年的索引。 .因此,由于 2019 年有 4 个月 2019-09-01 00:00:00 - 2020-01-01 00:00:00,它需要数字之和 15., 39.6, 0.2, 34.3 并除以 2019 年的月数,即 4,从而得到 22.28Expected Output。但我试图制作一个显示mean, median, max ,min 的图表而不是我如何编写这样的代码?

import numpy as np
import pandas as pd
from pandas import DataFrame

date_list = ['2019-09-01 00:00:00', '2019-10-01 00:00:00', '2019-11-01 00:00:00',
 '2019-12-01 00:00:00', '2020-01-01 00:00:00', '2020-02-01 00:00:00', 
 '2020-03-01 00:00:00', '2020-04-01 00:00:00', '2020-05-01 00:00:00', 
 '2020-06-01 00:00:00', '2020-07-01 00:00:00', '2020-08-01 00:00:00',
 '2020-09-01 00:00:00','2020-10-01 00:00:00', '2020-11-01 00:00:00', 
 '2020-12-01 00:00:00','2021-01-01 00:00:00','2021-02-01 00:00:00', '2021-03-01 00:00:00', 
 '2021-04-01 00:00:00','2021-05-01 00:00:00', '2021-06-01 00:00:00', 
 '2021-07-01 00:00:00']
monthly_values = np.array([ 15., 39.6, 0.2, 34.3, 19.6, 26.8, 15.7, 26., 12.6, 15.5, 18.6, 2.3, 6.5,
   2.5, 12.2, 11.6, 93.9, 25.5, 26.5, -16.5, -1.4, -1.8, 5.])

data = pd.DataFrame("Date": date_list, "Averages": monthly_values)
data["Date"] = pd.to_datetime(data["Date"])
print(data.groupby(data["Date"].dt.year).mean())

输出:

       Averages
Date           
2019  22.275000
2020  14.158333
2021  18.742857

预期输出:

       Averages    Median    Max    Min
Date           
2019  22.275000    24.65     39.6   0.2
2020  14.158333    14.05     93.9  -16.5
2021  18.742857    5.00      26.8   2.3

【问题讨论】:

这能回答你的问题吗? Multiple aggregations of the same column using pandas GroupBy.agg() 嗨!你的问题解决了吗?如果是这样,请尝试考虑accepting 向其他人发出问题已解决的信号。如果没有,您可以提供反馈,以便改进(或删除)答案 【参考方案1】:

通过groupby(),agg(),droplevel()rename() 尝试:

out=(data.groupby(data["Date"].dt.year)
     .agg(['mean','median','max','min'])
     .droplevel(0,1)
     .rename(columns=lambda x:'Average' if x=='mean' else x.title()))

通过pivot_table()droplevel()rename()

out=(data.pivot_table('Averages',data["Date"].dt.year,aggfunc=['mean','median','max','min'])
         .droplevel(1,1)
         .rename(columns=lambda x:'Average' if x=='mean' else x.title()))

out 的输出:

         Average    Median  Max     Min
Date                
2019    22.275000   24.65   39.6    0.2
2020    14.158333   14.05   26.8    2.3
2021    18.742857   5.00    93.9    -16.5

【讨论】:

以上是关于按日期分隔数据框并计算数学模型 Numpy Python的主要内容,如果未能解决你的问题,请参考以下文章

按标签分隔数据框(将数据框转换为 numpy 数组)

在对其进行一些计算后,我如何下载数据框并获得新的结果?

查询按日期范围分隔的行数

按所有列拆分数据框并插入到数据框列表中

numpy pandas读文件 numpy数值计算模块

Spark-SQL:如何将 TSV 或 CSV 文件读入数据框并应用自定义模式?