Python 按日期将数据帧拆分为多个帧

Python 按日期将数据帧拆分为多个帧,python,pandas,dataframe,Python,Pandas,Dataframe,我完全理解这个问题有几个版本,但似乎没有一个能抓住我问题的核心。从2015年到现在,我有一个大约72000行的熊猫数据帧。我正在使用一种计算方法,为给定的文本集(tf_idf)查找最有影响力的单词。此计算不考虑时间,因此我需要将主数据帧分解为基于时间的段,理想情况下,每15天和30天(或n天,实际上不是周/月),然后在每个时间段的数据帧上运行计算,以便查看和绘制随着时间的推移出现的越来越少的单词 我已经能够通过以下方式半手动构建其中的一部分: def dateRange(): 开始=输入(“输入

我完全理解这个问题有几个版本,但似乎没有一个能抓住我问题的核心。从2015年到现在,我有一个大约72000行的熊猫数据帧。我正在使用一种计算方法,为给定的文本集(tf_idf)查找最有影响力的单词。此计算不考虑时间,因此我需要将主数据帧分解为基于时间的段,理想情况下,每15天和30天(或n天,实际上不是周/月),然后在每个时间段的数据帧上运行计算,以便查看和绘制随着时间的推移出现的越来越少的单词

我已经能够通过以下方式半手动构建其中的一部分:

def dateRange():
开始=输入(“输入开始日期(MM-DD-YYYY)或过去30天的“30”:
如果(开始!=“30”):
datetime.strtime(开始,“%m-%d-%Y”)
结束=输入(“输入结束日期(MM-DD-YYYY):”)
datetime.strtime(结束,“%m-%d-%Y”)
dataTime=data[(data['STATUSDATE']>start)和(data['STATUSDATE']datetime.now()-pd.to_timedelta('30day')]
返回数据时间
dataTime=dateRange()
dataTime2=dateRange()
def calcForDateRange(日期范围框架):
#####长函数####
返回单词和数字
CalcForDaterRange(数据时间)
CalcForDaterRange(数据时间2)
这是可行的-但是,我必须手动创建2个日期,这是作为测试创建的。如何按增量拆分数据帧并为每个数据帧运行计算

dicts
据说就是这样做的。我试过:

dict_of_dfs={}
对于data.groupby(数据['STATUSDATE'])中的n,g:
dict_of_dfs[n]=g
对于dict_of_dfs中的帧:
CalcForDaterRange(框架)
dict结果是没有帧的数据帧。如何将其分解为100个左右的数据帧来运行我的函数

另外,我不完全理解如何具体地按天数来细分
['STATUSDATE']

我希望尽可能避免重复,但我知道我可能不得不在这里


谢谢

让我们假设您有这样一个数据帧:

date = pd.date_range(start='1/1/2018', end='31/12/2018', normalize=True)
x = np.random.randint(0, 1000, size=365)

df = pd.DataFrame(x, columns = ["X"])
df['Date'] = date
df.head()
输出

    X   Date
0   328 2018-01-01
1   188 2018-01-02
2   709 2018-01-03
3   259 2018-01-04
4   131 2018-01-05
所以这个数据框有365行,一年中的每一天一行

现在,如果您想将这些数据分组为20天的间隔,并将每组分配给dict,您可以执行以下操作

df_dict = {}
for k,v in df.groupby(pd.Grouper(key="Date", freq='20D')):
    df_dict[k.strftime("%Y-%m-%d")] = pd.DataFrame(v)
print(df_dict)

假设您有这样一个数据帧:

date = pd.date_range(start='1/1/2018', end='31/12/2018', normalize=True)
x = np.random.randint(0, 1000, size=365)

df = pd.DataFrame(x, columns = ["X"])
df['Date'] = date
df.head()
输出

    X   Date
0   328 2018-01-01
1   188 2018-01-02
2   709 2018-01-03
3   259 2018-01-04
4   131 2018-01-05
所以这个数据框有365行,一年中的每一天一行

现在,如果您想将这些数据分组为20天的间隔,并将每组分配给dict,您可以执行以下操作

df_dict = {}
for k,v in df.groupby(pd.Grouper(key="Date", freq='20D')):
    df_dict[k.strftime("%Y-%m-%d")] = pd.DataFrame(v)
print(df_dict)

类似这样的东西怎么样。它创建了一个非空数据帧的字典,这些数据帧被键入 期间的开始日期

import datetime as dt

start = '12-31-2017'
interval_days = 30

start_date = pd.Timestamp(start)
end_date = pd.Timestamp(dt.date.today() + dt.timedelta(days=1))
dates = pd.date_range(start=start_date, end=end_date, freq=f'{interval_days}d')

sub_dfs = {d1.strftime('%Y%m%d'): df.loc[df.dates.ge(d1) & df.dates.lt(d2)]
           for d1, d2 in zip(dates, dates[1:])}
# Remove empty dataframes.
sub_dfs = {k: v for k, v in sub_dfs.items() if not v.empty}

类似这样的东西怎么样。它创建了一个非空数据帧的字典,这些数据帧被键入 期间的开始日期

import datetime as dt

start = '12-31-2017'
interval_days = 30

start_date = pd.Timestamp(start)
end_date = pd.Timestamp(dt.date.today() + dt.timedelta(days=1))
dates = pd.date_range(start=start_date, end=end_date, freq=f'{interval_days}d')

sub_dfs = {d1.strftime('%Y%m%d'): df.loc[df.dates.ge(d1) & df.dates.lt(d2)]
           for d1, d2 in zip(dates, dates[1:])}
# Remove empty dataframes.
sub_dfs = {k: v for k, v in sub_dfs.items() if not v.empty}

这一个可行,但我的函数循环中又出现了一个错误。不确定原因是因为我在这一个可行之前尝试了它,但我的函数循环中又出现了一个错误。不确定原因是因为我在之前尝试了它