pandas Python:如何在同一个Excel工作表中获得多个结果?

6vl6ewon  于 2023-03-28  发布在  Python
关注(0)|答案(1)|浏览(90)

我有一个由10列组成的数据集,我目前正在使用groupby()函数获取前6列的平均值,然后使用groupby()获取其他4列的最小值和最大值。问题是,当我试图将结果放入新的Excel工作表时,我一直收到错误,即'list'对象没有属性'to_excel'

avg = df.groupby('column1')[['column2' , 'column3', 'column4' ,'column5',  'column6',  'column7' ]].mean()

c8= (df.assign(c8=df['column8'].abs())
       .groupby(['column1'])['column8'].agg([('min' , 'min'), ('max', 'max')])
       .add_prefix('c8'))

c9= (df.assign(c9=df['column9'].abs())
       .groupby(['column1'])['column9'].agg([('min' , 'min'), ('max', 'max')])
       .add_prefix('c9'))

c10= (df.assign(c10=df['column'].abs())
       .groupby(['column1'])['column10'].agg([('min' , 'min'), ('max', 'max')])
       .add_prefix('c10'))

df = [avg , c8, c9, c10]

#print(df)

wb = pd.ExcelWriter('C:filepath.xlsx' , engine='xlsxwriter')
df.to_excel(wb,sheet_name='Results')
wb.save()

每当我单独运行任何函数时,它们都工作得很好,问题是当我把它们放在一起时。
我期待的是一个Excel表格,其中填写了相应的数据,如下所示:

column1 column2 column3 column4 column5 column6 column7 c8min c8max c9min c9max c10min c10max
pxyaymoc

pxyaymoc1#

我会这样做GroupBy.agg在一个 * 单杆 *:

fmin = lambda x: abs(x).min()
fmax = lambda x: abs(x).max()

out = (
        df.groupby("column1", as_index=False)
          .agg(column2=("column2", "mean"), column3=("column3", "mean"),
               column4=("column4", "mean"), column5=("column5", "mean"),
               column6=("column6", "mean"), column7=("column7", "mean"), # avg
               c8min=("column8", fmin), c8max=("column8", fmax), # c8
               c9min=("column9", fmin), c9max=("column9", fmax), # c9
               c10min=("column10", fmin), c10max=("column10", fmax)) # c10
)

out.to_excel("C:/filepath.xlsx", sheet_name="Results", index=False)

或者按照您的方法,您可以使用concat来避免AttributeError

list_dfs = [avg , c8, c9, c10]

(pd.concat(list_dfs, axis=1).reset_index()
    .to_excel("C:/filepath.xlsx", sheet_name="Results", index=False))

顺便说一下,为什么你要分配新列cx而不使用它们?我想你需要这样的东西:

#Example with c8
c8= (df.assign(c8=df["column8"].abs())
       .groupby(["column1"])["c8"].agg([("min" , "min"), ("max", "max")])
       .add_prefix("c8"))

相关问题