【问题标题】:how to convert pandas groupby output to separate excel sheet?如何将熊猫 groupby 输出转换为单独的 excel 表?
【发布时间】:2021-12-02 00:32:59
【问题描述】:

我创建了 10 天每小时数据的时间戳,然后创建了 2 个具有随机值的随机列。

import pandas as pd
import numpy as np
timestamp = pd.date_range('01/01/2020 00:00','01/10/2020 23:00', freq = '1H')
arr1 = np.random.randint(100,200,(len(timestamp)))
arr2 = np.random.randint(100,200,(len(timestamp)))

创建了这两个arrays 中的dataframe,其中col1col2 作为列,timestamp 作为索引。

dic1 = {'col1':arr1,'col2':arr2}
df = pd.DataFrame(dic1, index=timestamp)

之后,我使用 pandas groupby 函数将它们按days 分组,我想创建每个组的 excel 输出(10 天 10 个 excel 输出)。

df2 = df.groupby(pd.Grouper(freq='D'))
for idx, i in enumerate(df2):
   df = pd.Dataframe(i)
   df.to_csv(str(idx)+'.csv')

但这给出了非常奇怪的输出,有 10 个 excel 文件,但其中没有值。有人可以帮忙吗? 所需的输出 第 1 天:

同样,每天都应该生成这种类型的 excel。

【问题讨论】:

    标签: python pandas group-by


    【解决方案1】:

    如果你迭代 .groupby,你会得到一个 2 元组,其中第一个元素是组键,第二个元素是组数据,所以你需要这样的东西:

    df2 = df.groupby(pd.Grouper(freq='D'))
    for idx, (_, sdf) in enumerate(df2):
       sdf.to_csv(str(idx) + '.csv')
    

    【讨论】:

    • 非常感谢先生
    【解决方案2】:

    当您执行for idx, i in enumerate(df2) 时,每个i 是一对group_key, data。试试:

    for g, data in df.groupby(...):
        data.to_csv(str(g) + '.csv')
    

    如果你真的想枚举:

    for idx, (g, data) in enumerate(df.groupby(...)):
        data.to_csv(str(idx) + '.csv')
    

    【讨论】:

    • 嘿,这给出了一个错误 TypeError: 'ellipsis' object is not callable
    • A,我很懒,你应该用pd.Grouper(freq='D')代替省略号。对不起
    • 哈哈……没关系。非常感谢您的帮助
    猜你喜欢
    • 2017-03-06
    • 2018-06-02
    • 2020-12-06
    • 1970-01-01
    • 2020-05-07
    • 2021-01-06
    • 2021-12-01
    • 2021-10-28
    • 2016-12-05
    相关资源
    最近更新 更多