現在我有一個類似于表格的熊貓資料框
| 指數 | 日期 | 回傳 |
|---|---|---|
| 1 | 2017-1 | 0.1 |
| 1 | 2017-2 | 0.2 |
| 1 | 2017-3 | 0.3 |
| 2 | 2017-1 | 0.4 |
| 2 | 2017-2 | 0.5 |
| 2 | 2017-3 | 0.6 |
| 3 | 2017-1 | 0.7 |
| 3 | 2017-2 | 0.8 |
| 3 | 2017-3 | 0.9 |
| 4 | 2017-1 | 1.0 |
| 4 | 2017-2 | 1.1 |
| 4 | 2017-3 | 1.2 |
現在該表按此順序包含 4 個索引。我想在每 2 個指數上構建投資組合,保持日期不變,但投資組合回報是 2 個指數的平均值。這樣結果將是 2 個投資組合。
目標結果是
| 投資組合索引 | 日期 | 投資組合回報 |
|---|---|---|
| 投資組合 1 | 2017-1 | 0.25 |
| 投資組合 1 | 2017-2 | 0.35 |
| 投資組合 1 | 2017-3 | 0.45 |
| 投資組合 2 | 2017-1 | 0.85 |
| 投資組合 2 | 2017-2 | 0.95 |
| 投資組合 2 | 2017-3 | 1.05 |
例如,投資組合 1 應包含指數 1 和 2,并在不同月份有回報。有沒有可能的解決方案?
import pandas as pd
db = pd.read_csv('17base.csv')
db = db.groupby(db['index'])['return'].mean()
uj5u.com熱心網友回復:
IIUC,您需要在以下幫助下制作自定義資料框numpy.reshape:
N = 2 # number of values to group
M = 3 # number of Dates per portfolio
df2 = pd.DataFrame({'portfolio_index': df['index'].iloc[:len(df)//2],
'Date': df['Date'].iloc[:len(df)//2],
'portfolio return': df['return'].to_numpy().reshape(N,-1,M).mean(1).ravel()
})
輸出:
portfolio_index Date portfolio return
0 1 2017-1 0.25
1 1 2017-2 0.35
2 1 2017-3 0.45
3 2 2017-1 0.85
4 2 2017-2 0.95
5 2 2017-3 1.05
或者,使用pandas:
N = 2
M = 3
group = 'portfolio_' pd.Series(np.arange(len(df)//M)//N 1).astype(str)
(df
.pivot(index='index', columns='Date', values='return')
.groupby(group.values).mean()
.rename_axis('portfolio_index')
.stack()
.reset_index(name='portfolio return')
)
輸出:
portfolio Date portfolio return
0 portfolio_1 2017-1 0.25
1 portfolio_1 2017-2 0.35
2 portfolio_1 2017-3 0.45
3 portfolio_2 2017-1 0.85
4 portfolio_2 2017-2 0.95
5 portfolio_2 2017-3 1.05
uj5u.com熱心網友回復:
您可以構建一個自定義組索引,以反映您希望將哪些行聚合在一起:
import numpy as np
import pandas as pd
n = 12
df = pd.DataFrame({'return': np.linspace(0.1, 1.2, num=n)})
df['group'] = (np.tile([0, 1, 2, 0, 1, 2], n // 6)
np.repeat(np.arange(n // 2, step=3), 6))
df
return group
0 0.1 0
1 0.2 1
2 0.3 2
3 0.4 0
4 0.5 1
5 0.6 2
6 0.7 3
7 0.8 4
8 0.9 5
9 1.0 3
10 1.1 4
11 1.2 5
所以現在你可以相應地分組:
df.groupby('group').mean()
return
group
0 0.25
1 0.35
2 0.45
3 0.85
4 0.95
5 1.05
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/459188.html
上一篇:如何使用熊貓連接
下一篇:合并期間僅向第一個組合添加值
