2 回答
TA贡献1853条经验 获得超18个赞
我不认为你想像 Shijith 展示的那样重新采样。我认为您每周都需要不同的数据框。IMO 您想为此使用groupby ( doc )。Pandas Groupby函数可用于按列或索引拆分数据框中的数据。该方法返回一个 pandas groupby 对象,该对象可用于在将组合并回来之前对组执行操作。
在代码片段中,我首先创建一个列来对数据进行分组(即“周”列)。比我按周列对数据进行分组。这将创建一个 groupby 对象,其中包括一个字典,该字典具有“weeks”列的唯一值作为键和数据帧的索引列表,这些索引列表具有与“weeks”列相同的值作为值。这可以通过print(grps.groups)在控制台中输入来查看。然后我遍历组的键,并通过调用get_groupgroupby 对象上的方法将每周数据帧添加到字典中。
import pandas as pd
# Make sample data
index=pd.date_range(start='2014-01-01', end='2014-1-31',freq='D')
df = pd.DataFrame({"vals":np.random.randint(-5,5,len(index))}, index=index)
df["csum"] = df.vals.cumsum()
# Add a column for weeks to enable grouping
df["weeks"] = df.index.week
# Group the data
grps = df.groupby("weeks")
# split the group into separate dataframes
df_dict = {}
for gi in grps.groups:
df_dict[gi] = grps.get_group(gi)
我从这样的事情开始:
vals csum weeks
2014-01-01 4 4 1
2014-01-02 -5 -1 1
...
2014-01-30 -2 -9 5
2014-01-31 -5 -14 5
最终得到如下数据框
1
vals csum weeks
2014-01-01 4 4 1
2014-01-02 -5 -1 1
2014-01-03 -4 -5 1
2014-01-04 4 -1 1
2014-01-05 -5 -6 1
2
vals csum weeks
2014-01-06 -5 -11 2
2014-01-07 2 -9 2
2014-01-08 4 -5 2
2014-01-09 -1 -6 2
2014-01-10 -1 -7 2
2014-01-11 -3 -10 2
2014-01-12 -2 -12 2
TA贡献1828条经验 获得超3个赞
如果您的数据框df按日期编入索引
print(df)
High Low Open Close Volume Adj Close
Date
2019-04-01 191.679993 188.380005 191.639999 191.240005 27862000 191.240005
2019-04-02 194.460007 191.050003 191.089996 194.020004 22765700 194.020004
2019-04-03 196.500000 193.149994 193.250000 195.350006 23271800 195.350006
2019-04-04 196.369995 193.139999 194.789993 195.690002 19114300 195.690002
2019-04-05 197.100006 195.929993 196.449997 197.000000 18526600 197.000000
2019-04-08 200.229996 196.339996 196.419998 200.100006 25881700 200.100006
2019-04-09 202.850006 199.229996 200.320007 199.500000 35768200 199.500000
2019-04-10 200.740005 198.179993 198.679993 200.619995 21695300 200.619995
2019-04-11 201.000000 198.440002 200.850006 198.949997 20900800 198.949997
2019-04-12 200.139999 196.210007 199.199997 198.869995 27760700 198.869995
做,
weekly_summary = pd.DataFrame()
weekly_summary['Open'] = df.open.resample('W').first()
print(weekly_summary)
Open
Date
2019-04-07 191.639999
2019-04-14 196.419998
如果它没有按日期时间编入索引,
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)
df.sort_index(inplace=True)
weekly_summary = pd.DataFrame()
weekly_summary['Open'] = df.open.resample('W').first()
对于上面的代码数据框将在 'sundays' 进行索引,如果您希望它在 'Mondays' (即一周的开始日期)进行索引,请执行以下操作。
weekly_summary = pd.DataFrame()
weekly_summary['Open'] = df.open.resample('W',loffset=pd.offsets.timedelta(days=-6)).first()
print(weekly_summary)
Open
Date
2019-04-01 191.639999
2019-04-08 196.419998
添加回答
举报