当前位置: 首页 > 面试题库 >

Pandas-根据日期将数据框拆分为多个数据框?

胡璞瑜
2023-03-14
问题内容

我有一个带有多个列以及一个日期列的数据框。日期格式为15年12月31日,我将其设置为日期时间对象。

我将datetime列设置为索引,并希望对数据框的每个月执行回归计算。

我相信实现此目的的方法是将数据框基于月份拆分为多个数据框,存储到数据框列表中,然后对列表中的每个数据框执行回归。

我使用过groupby可以按月成功拆分数据框,但是不确定如何正确地将groupby对象中的每个组转换为数据框,以便能够在其上运行回归函数。

有谁知道如何根据日期将一个数据框拆分为多个数据框,或者更好地解决我的问题?

这是我到目前为止编写的代码

import pandas as pd
import numpy as np
import statsmodels.api as sm
from patsy import dmatrices

df = pd.read_csv('data.csv')
df['date'] = pd.to_datetime(df['date'], format='%Y%m%d')
df = df.set_index('date')

# Group dataframe on index by month and year 
# Groupby works, but dmatrices does not 
for df_group in df.groupby(pd.TimeGrouper("M")):
    y,X = dmatrices('value1 ~ value2 + value3', data=df_group,      
    return_type='dataframe')

问题答案:

如果必须循环,则遍历groupby对象时需要解压缩键和数据框:

import pandas as pd
import numpy as np
import statsmodels.api as sm
from patsy import dmatrices

df = pd.read_csv('data.csv')
df['date'] = pd.to_datetime(df['date'], format='%Y%m%d')
df = df.set_index('date')

注意group_name这里的用法:

for group_name, df_group in df.groupby(pd.Grouper(freq='M')):
    y,X = dmatrices('value1 ~ value2 + value3', data=df_group,      
    return_type='dataframe')

如果要避免迭代,请看看Paul
H的要旨
中的笔记本(请参阅他的评论),但是使用的简单示例apply是:

def do_regression(df_group, ret='outcome'):
    """Apply the function to each group in the data and return one result."""
    y,X = dmatrices('value1 ~ value2 + value3',
                    data=df_group,      
                    return_type='dataframe')
    if ret == 'outcome':
        return y
    else:
        return X

outcome = df.groupby(pd.Grouper(freq='M')).apply(do_regression, ret='outcome')


 类似资料:
  • 问题内容: 我有一个非常大的数据框(大约一百万行),其中包含来自实验的数据(60位受访者)。我想将数据框分成60个数据框(每个参与者一个数据框)。 在数据帧(称为=数据)中,有一个名为“名称”的变量,它是每个参与者的唯一代码。 我已经尝试了以下方法,但是没有任何反应(或者一小时内没有停止)。我打算做的是将数据帧(数据)拆分为较小的数据帧,并将其附加到列表(数据列表)中: 我没有收到错误消息,脚本似

  • 问题内容: 我有从构成的DataFrame 。一行包含96个值,我想将DataFrame与值72分开。 以便将行的前72个值存储在Dataframe1中,并将行的后24个值存储在Dataframe2中。 我按如下方式创建我的DF: 问题是:如何拆分它们?:) 问题答案: (iloc文档)

  • 问题内容: 我已使用从IMDB收集信息并将其传输到MYSQL数据库的应用程序导入了一些数据。 似乎这些字段尚未标准化,并且在1个字段中包含许多值 例如: 有没有办法将这些值分开,然后将它们插入到另一个表中,而不重复呢? 我进行了一些谷歌搜索,发现我应该使用PHP处理此数据。但是我一点都不了解PHP。 无论如何,仅使用MYSQL即可转换此​​数据? 问题答案: 您可以使用存储过程,该过程使用游标来解

  • 问题内容: 我正在尝试将Pandas DF转换为Spark one。DF头: 码: 我得到一个错误: 问题答案: 您需要确保您的pandas dataframe列适合spark推断的类型。如果您的熊猫数据框列出类似以下内容: 而且您遇到该错误,请尝试: 现在,确保实际上是您希望这些列成为的类型。基本上,当底层Java代码尝试从python中的对象推断类型时,它会使用一些观察值并做出猜测,如果该猜测

  • 我有两个共享分组ID的数据帧。我希望根据另一个设置的条件在其中创建一个日期序列。MRE如下: 在这个例子中,我想在 中创建一列日期,从 中的下一个日期开始(每个组 - 组中的 在 中, 在 中)。 具有数据。表中,这些(可怕的)方法都不起作用: 我一直在尝试数据。表方法,因为它们被认为更快(而且实际数据相当大),但实际上,任何(合理的)方法都可以。 我的预期结果是一个看起来像这样的 data.fr

  • 嘿,伙计们,我有一个程序,它读取csv文件,随机生成数据并将其转储到另一个csv文件中...现在我有一个csv文件,其中有100列,其中30列属于其他一些数据,但在最后生成时,我想通过附加一些对csv文件通用的公共列将这些数据分割成两个不同的csv文件。这是csv示例数据: 在这种情况下,两个文件都有一个共同点,因此输出数据应该如下所示: 为了得到一个带有所有条件的csv文件,我写了一个代码,这是