使用pandas将数组连接到单个表中

2024-05-19 02:49:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个.csv文件,从这个文件中,我按年份对它进行分组,这样它就给出了最大值、最小值和平均值

 import pandas as pd
 DF = pd.read_csv("PJME_hourly.csv")

 for i in range(2002,2019):    
     neblina = DF[DF.Datetime.str.contains(str(i))]
     dateframe = neblina.agg({"PJME_MW" : ['max','min','mean']})
     print(i , pd.concat([dateframe],axis=0,sort= False))

他的产出如下:

 2002            PJME_MW
 max   55934.000000
 min   19247.000000
 mean  31565.617106
 2003            PJME_MW
 max   53737.000000
 min   19414.000000
 mean  31698.758621
 2004            PJME_MW
 max   51962.000000
 min   19543.000000
 mean  32270.434867

我想知道如何将所有操作都合并到一个列中(PJME_MW),但每个操作组(max、min、mean)都是由对应的年份确定的


Tags: 文件csvimportdfminmeanmax平均值
2条回答

如果转换日期^{},可以使用^{}访问器对其进行分组:

df = pd.read_csv('PJME_hourly.csv')
df.Datetime = pd.to_datetime(df.Datetime)
df.groupby(df.Datetime.dt.year).agg(['min', 'max', 'mean'])

玩具示例:

df = pd.DataFrame({'Datetime': ['2019-01-01','2019-02-01','2020-01-01','2020-02-01','2021-01-01'], 'PJME_MV': [3,5,30,50,100]})

#      Datetime  PJME_MV
# 0  2019-01-01        3
# 1  2019-02-01        5
# 2  2020-01-01       30
# 3  2020-02-01       50
# 4  2021-01-01      100
df.Datetime = pd.to_datetime(df.Datetime)
df.groupby(df.Datetime.dt.year).agg(['min', 'max', 'mean'])

#          PJME_MV          
#              min  max mean
# Datetime                  
# 2019           3    5    4
# 2020          30   50   40
# 2021         100  100  100

可以对代码进行优化,但现在如何工作,请更改代码的这一部分:

    for i in range(2002,2019):    
         neblina = DF[DF.Datetime.str.contains(str(i))]
         dateframe = neblina.agg({"PJME_MW" : ['max','min','mean']})
         print(i , pd.concat([dateframe],axis=0,sort= False))

用这个代替

aggs = ['max','min','mean']
df_group = df.groupby('Datetime')['PJME_MW'].agg(aggs).reset_index()
out_columns = ['agg_year', 'PJME_MW']
out = []
aux = pd.DataFrame(columns=out_columns)
for agg in aggs:
    aux['agg_year'] = agg + '_' + df_group['Datetime']
    aux['PJME_MW']  = df_group[agg]
    out.append(aux)
df_out = pd.concat(out)

编辑:连接形式已更改

最终编辑:对不起,我不理解整个问题。您不需要groupby函数之后的代码

相关问题 更多 >

    热门问题