我试图找出如何将每日日期与特定月份相结合,并总结每个日期在特定月份内的数据。
注意:我有一个包含每日日期的巨大列表,但我在这里放了一个小样本,只是示例。
文件名:(test.xlsx)
对于示例(sheet1)包含数据帧模式:
DATE 51 52 53 54 55 56
0 20110706 28.52 27.52 26.52 25.52 24.52 23.52
1 20110707 28.97 27.97 26.97 25.97 24.97 23.97
2 20110708 28.52 27.52 26.52 25.52 24.52 23.52
3 20110709 28.97 27.97 26.97 25.97 24.97 23.97
4 20110710 30.5 29.5 28.5 27.5 26.5 25.5
5 20110711 32.93 31.93 30.93 29.93 28.93 27.93
6 20110712 35.54 34.54 33.54 32.54 31.54 30.54
7 20110713 33.02 32.02 31.02 30.02 29.02 28.02
8 20110730 35.99 34.99 33.99 32.99 31.99 30.99
9 20110731 30.5 29.5 28.5 27.5 26.5 25.5
10 20110801 32.48 31.48 30.48 29.48 28.48 27.48
11 20110802 31.04 30.04 29.04 28.04 27.04 26.04
12 20110803 32.03 31.03 30.03 29.03 28.03 27.03
13 20110804 34.01 33.01 32.01 31.01 30.01 29.01
14 20110805 27.44 26.44 25.44 24.44 23.44 22.44
15 20110806 32.48 31.48 30.48 29.48 28.48 27.48
我想要的是编辑(“test.xlsx”,“sheet1”)以产生以下内容:
DATE 51 52 53 54 55 56
0 201107 313.46 303.46 293.46 283.46 273.46 263.46
1 201108 189.48 183.48 177.48 171.48 165.48 159.48
我将如何实施此功能?
到目前为止,这是我的代码:
import pandas as pd
from pandas import ExcelWriter
df = pd.read_excel('thecddhddtestquecdd.xlsx')
def sep_yearmonths(x):
x['month'] = str(x['DATE'])[:-2]
return x
df = df.apply(sep_yearmonths,axis=1)
df.groupby('month').sum()
writer = ExcelWriter('thecddhddtestquecddMERGE.xlsx')
df.to_excel(writer,'Sheet1',index=False)
writer.save()
答案 0 :(得分:2)
如果'DATE'是一列字符串而不是你的索引,这将有效。
示例数据框 - 为清晰起见缩短了:
df = pd.DataFrame({'DATE': {0: '20110706', 1:'20110707', 2: '20110801'},
52: {0: 28.52, 1: 28.97, 2: 28.52},
55: { 0: 24.52, 1: 24.97, 2:24.52 }
})
哪个收益率:
52 55 DATE
0 28.52 24.52 20110706
1 28.97 24.97 20110707
2 28.52 24.52 20110801
在数据框上应用以下函数以生成新列:
def sep_yearmonths(x):
x['month'] = x['DATE'][:-2]
return x
像这样:
df = df.apply(sep_yearmonths,axis=1)
然后你可以将其分组并加总:
df.groupby('month').sum()
导致以下结果:
52 55
month
201107 57.49 49.49
201108 28.52 24.52
如果'date'是您的索引,只需拨打reset_index
即可。如果它不是一列字符串值,那么您需要事先做到这一点。
最后,您可以将“月份”列重命名为“日期”。我想你可以在里面替换“DATE”列,但我选择明确地做事。你可以这样做:
df['DATE'] = df['DATE'].apply(lambda x: x[:-2])
然后'groupby''DATE'而不是月。
答案 1 :(得分:0)
使用resample
import pandas as pd
myTable=pd.read_excel('test.xlsx')
myTable['DATE']=pd.to_datetime(myTable['DATE'], format="%Y%m%d")
myTable=myTable.set_index('DATE')
myTable.resample("M").sum()