pandas 使用panda groupby对多个列进行分组

3phpmpom  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(189)

我已经导入了一个.xlsx文件,它有多个标签(大约3百万行),其中列标题只存在于第一个标签上,剩下的标签上只有没有标题的数据。

import pandas as pd

#load in .xlsx with multiple tabs as a dataframe
filepath = "Consumption_20221111_testdata.xlsx"
df_dict = pd.read_excel(filepath, sheet_name=None, header=None)
df_all = pd.concat(df_dict.values(), ignore_index=True)
df_all = df_all.drop(columns=df_all.columns[2]) #remove column "PERIOD_ID"
df_all = df_all.drop(columns=df_all.columns[2]) #remove column "DATA_FLAG"
df_all = df_all.drop(df_all.index[-1]) #remove the last row (details of query run on SQL database that produced .xlsx which is the last tab of the .xlsx)
df_all = df_all.dropna(how='all') #remove columns that are all 'NaN'
df_all[1] = pd.to_datetime(df_all[1][1]) #convert column from object to datetime
print(df_all)
print(df_all.dtypes)

我的 Dataframe 有一个列和行的索引,但是日期列现在有一个日期而不是标题?
| | 第0页|一个|四个|
| - -|- -|- -|- -|
| 第0页|参考编号|2022年10月12日|缺点|
| 一个|参考1| 2022年10月12日|0.262英寸|
| 2个|参考2| 2022年10月12日|零点二五九|
| 三个|参考2| 2022年10月12日|0.405分|
我需要按参考和日期对数据进行分组,聚合消耗量以进行逐月比较,但首先我需要有一个可以参考的数据框架!

df_all["Month"] = df_all[1].dt.month
df_all = df_all.groupby(by=[1, "Month"], as_index=False).agg({"CONS":sum})
df_all

导致;
KeyError:“列['CONS']不存在”

xyhw6mcr

xyhw6mcr1#

下面是一个使用方法链接的命题:

df_all = (
            pd.concat(pd.read_excel("Consumption_20221111_testdata.xlsx",
                                    header=None, sheet_name=None), ignore_index=True)
                .T.set_index(0).T
                .rename_axis(None, axis=1)
                .loc[:, ["REF", "DATE", "CONS"]]
                .assign(MONTH= lambda x: x["DATE"].dt.month)
                .groupby(by=["DATE", "MONTH"], as_index=False).agg({"CONS":sum})
         )
#输出:
​
print(df_all)

        DATE  MONTH  CONS
0 2022-10-12     10  5.25
  • 注意:输入Excel由您共享的一些行加上一些随机值组成。*

相关问题