Python 如何在熊猫图书馆按天求和?
我创建了以下词典:Python 如何在熊猫图书馆按天求和?,python,pandas,dictionary,Python,Pandas,Dictionary,我创建了以下词典: for k, er in dicio.items(): #dicio[k]['Return %'] = er.iloc[:, 0].pct_change(-1)*100 dicio[k]['Day'] = er.index.day dicio {'WDOFUT': WDOFUT Day Data 2020-09-11 5325.0 11 2020-09-10 5325.0 1
for k, er in dicio.items():
#dicio[k]['Return %'] = er.iloc[:, 0].pct_change(-1)*100
dicio[k]['Day'] = er.index.day
dicio
{'WDOFUT': WDOFUT Day
Data
2020-09-11 5325.0 11
2020-09-10 5325.0 10
2020-09-09 5312.5 9
2020-09-08 5366.0 8
2020-09-04 5303.0 4
... ... ...
1994-07-08 NaN 8
1994-07-07 NaN 7
1994-07-06 NaN 6
1994-07-05 NaN 5
1994-07-04 NaN 4
[6482 rows x 2 columns],
'WEGE3': WEGE3 Day
Data
2020-09-11 62.42 11
2020-09-10 62.42 10
2020-09-09 64.93 9
2020-09-08 63.00 8
2020-09-04 64.49 4
... ... ...
1994-07-08 NaN 8
1994-07-07 NaN 7
1994-07-06 NaN 6
1994-07-05 NaN 5
1994-07-04 NaN 4
[6482 rows x 2 columns],
'YDUQ3': YDUQ3 Day
Data
2020-09-11 27.31 11
2020-09-10 27.31 10
2020-09-09 27.99 9
2020-09-08 28.75 8
2020-09-04 27.78 4
... ... ...
1994-07-08 NaN 8
1994-07-07 NaN 7
1994-07-06 NaN 6
1994-07-05 NaN 5
1994-07-04 NaN 4
[6482 rows x 2 columns]}
我可以按天分组,但它只取字典的最后一项(YDUQ3):
我可以看到下面显示的每日分组词典,但仅限于最后一项(我需要全部):
问题:
- 如何显示词典中的3项? (dicio[k]只使用了一个键(最后一个键))
- 我想把所有同一天的收益加起来
- 如果跨度为10年,则将有~120天01、~120天02,依此类推
- 每个符号都有一个31 x 120的字典,我们可以从中选择累积收益的最高日和最低日
- 然后,我想展示整个股票投资组合的最高/最低回报及其发生的天数
import pandas as pd
import numpy as np
dicio = {
'WDOFUT': [
[pd.Timestamp(year=2020, month= 9, day= 11), 5325.0, 11],
[pd.Timestamp(year=2020, month= 9, day= 10), 5325.0, 10],
[pd.Timestamp(year=2020, month= 9, day= 9), 5312.5, 9],
[pd.Timestamp(year=2020, month= 9, day= 8), 5366.0, 8],
[pd.Timestamp(year=2020, month= 9, day= 4), 5303.0, 4],
[pd.Timestamp(year=1994, month= 7, day= 8), np.nan, 8],
[pd.Timestamp(year=1994, month= 7, day= 7), np.nan, 7],
[pd.Timestamp(year=1994, month= 7, day= 6), np.nan, 6],
[pd.Timestamp(year=1994, month= 7, day= 5), np.nan, 5],
[pd.Timestamp(year=1994, month= 7, day= 4), np.nan, 4],],
'WEGE3': [
[pd.Timestamp(year=2020, month=9, day= 11), 62.42, 11],
[pd.Timestamp(year=2020, month=9, day= 10), 62.42, 10],
[pd.Timestamp(year=2020, month=9, day= 9), 64.93, 9],
[pd.Timestamp(year=2020, month=9, day= 8), 63.00, 8],
[pd.Timestamp(year=2020, month=9, day= 4), 64.49, 4],
[pd.Timestamp(year=1994, month=7, day= 8), np.nan, 8],
[pd.Timestamp(year=1994, month=7, day= 7), np.nan, 7],
[pd.Timestamp(year=1994, month=7, day= 6), np.nan, 6],
[pd.Timestamp(year=1994, month=7, day=5), np.nan, 5],
[pd.Timestamp(year=1994, month=7, day=4), np.nan, 4]
],
'YDUQ3':[
[pd.Timestamp(year=2020, month=9, day= 11), 27.31, 11],
[pd.Timestamp(year=2020, month=9, day= 10), 27.31, 10],
[pd.Timestamp(year=2020, month=9, day= 9), 27.99, 9],
[pd.Timestamp(year=2020, month=9, day= 8), 28.75, 8],
[pd.Timestamp(year=2020, month=9, day= 4), 27.78, 4],
[pd.Timestamp(year=1994, month=7, day= 8), np.nan, 8],
[pd.Timestamp(year=1994, month=7, day= 7), np.nan, 7],
[pd.Timestamp(year=1994, month=7, day= 6), np.nan, 6],
[pd.Timestamp(year=1994, month=7, day= 5), np.nan, 5],
[pd.Timestamp(year=1994, month=7, day= 4), np.nan, 4]],
}
data_list = []
for stk in dicio.keys():
for itm in dicio[stk]:
dline =[stk]
dline.extend(itm)
data_list.append(dline)
df = pd.DataFrame(data= data_list, columns= ['Stock','Date', 'Return','Day'])
grouped_by_day = df.groupby(by=['Day','Stock']).mean()
按天分组的打印输出产生:
Day Stock Return
4 WDOFUT 5303.00
WEGE3 64.49
YDUQ3 27.78
5 WDOFUT NaN
WEGE3 NaN
YDUQ3 NaN
6 WDOFUT NaN
WEGE3 NaN
YDUQ3 NaN
7 WDOFUT NaN
WEGE3 NaN
YDUQ3 NaN
8 WDOFUT 5366.00
WEGE3 63.00
YDUQ3 28.75
9 WDOFUT 5312.50
WEGE3 64.93
YDUQ3 27.99
10 WDOFUT 5325.00
WEGE3 62.42
YDUQ3 27.31
11 WDOFUT 5325.00
WEGE3 62.42
YDUQ3 27.31
我认为你应该能够从这个小组中获得你想要的结果。对不起,这不是我想要的。你想要达到的是什么?您期望的结果与建议的解决方案有何不同?将有多个股票符号,比如从2010年到2020年。我计算每个符号每天的每日回报。然后,对于每个股票符号,将有~120天01、~120天02,依此类推。我想知道每月每天的累积回报率。假设WEGE3股票在第03天的31天中累积回报最高,在第19天的累积回报最低。如果需要,可以问更多。你可以参考这篇文章:。。。。。。。在这里,特伦顿·麦金尼先生利用报税表得出了结果,而没有考虑当天的情况。我想为每个符号找出最好和最坏的日子。
import pandas as pd
import numpy as np
dicio = {
'WDOFUT': [
[pd.Timestamp(year=2020, month= 9, day= 11), 5325.0, 11],
[pd.Timestamp(year=2020, month= 9, day= 10), 5325.0, 10],
[pd.Timestamp(year=2020, month= 9, day= 9), 5312.5, 9],
[pd.Timestamp(year=2020, month= 9, day= 8), 5366.0, 8],
[pd.Timestamp(year=2020, month= 9, day= 4), 5303.0, 4],
[pd.Timestamp(year=1994, month= 7, day= 8), np.nan, 8],
[pd.Timestamp(year=1994, month= 7, day= 7), np.nan, 7],
[pd.Timestamp(year=1994, month= 7, day= 6), np.nan, 6],
[pd.Timestamp(year=1994, month= 7, day= 5), np.nan, 5],
[pd.Timestamp(year=1994, month= 7, day= 4), np.nan, 4],],
'WEGE3': [
[pd.Timestamp(year=2020, month=9, day= 11), 62.42, 11],
[pd.Timestamp(year=2020, month=9, day= 10), 62.42, 10],
[pd.Timestamp(year=2020, month=9, day= 9), 64.93, 9],
[pd.Timestamp(year=2020, month=9, day= 8), 63.00, 8],
[pd.Timestamp(year=2020, month=9, day= 4), 64.49, 4],
[pd.Timestamp(year=1994, month=7, day= 8), np.nan, 8],
[pd.Timestamp(year=1994, month=7, day= 7), np.nan, 7],
[pd.Timestamp(year=1994, month=7, day= 6), np.nan, 6],
[pd.Timestamp(year=1994, month=7, day=5), np.nan, 5],
[pd.Timestamp(year=1994, month=7, day=4), np.nan, 4]
],
'YDUQ3':[
[pd.Timestamp(year=2020, month=9, day= 11), 27.31, 11],
[pd.Timestamp(year=2020, month=9, day= 10), 27.31, 10],
[pd.Timestamp(year=2020, month=9, day= 9), 27.99, 9],
[pd.Timestamp(year=2020, month=9, day= 8), 28.75, 8],
[pd.Timestamp(year=2020, month=9, day= 4), 27.78, 4],
[pd.Timestamp(year=1994, month=7, day= 8), np.nan, 8],
[pd.Timestamp(year=1994, month=7, day= 7), np.nan, 7],
[pd.Timestamp(year=1994, month=7, day= 6), np.nan, 6],
[pd.Timestamp(year=1994, month=7, day= 5), np.nan, 5],
[pd.Timestamp(year=1994, month=7, day= 4), np.nan, 4]],
}
data_list = []
for stk in dicio.keys():
for itm in dicio[stk]:
dline =[stk]
dline.extend(itm)
data_list.append(dline)
df = pd.DataFrame(data= data_list, columns= ['Stock','Date', 'Return','Day'])
grouped_by_day = df.groupby(by=['Day','Stock']).mean()
Day Stock Return
4 WDOFUT 5303.00
WEGE3 64.49
YDUQ3 27.78
5 WDOFUT NaN
WEGE3 NaN
YDUQ3 NaN
6 WDOFUT NaN
WEGE3 NaN
YDUQ3 NaN
7 WDOFUT NaN
WEGE3 NaN
YDUQ3 NaN
8 WDOFUT 5366.00
WEGE3 63.00
YDUQ3 28.75
9 WDOFUT 5312.50
WEGE3 64.93
YDUQ3 27.99
10 WDOFUT 5325.00
WEGE3 62.42
YDUQ3 27.31
11 WDOFUT 5325.00
WEGE3 62.42
YDUQ3 27.31