#python #pandas
#python #панды
Вопрос:
У меня есть следующий фрейм данных:
data={"Date":["8/4/2020","8/4/2020","8/4/2020","8/4/2020","8/4/2020"],
"Weight":[35,35,30,50,50],
"Subportfolio":["Portfolio1","Portfolio2","Portfolio3","Portfolio4","Portfolio5"],
"Portfolio Code":[1,1,1,2,2],
"Instrument":["","","","",""],
"Amount":["","","","",""]}
df=pd.DataFrame(data)
Это выглядит так:
Date Weight Subportfolio Portfolio Code Instrument Amount
0 8/4/2020 35 Portfolio 1 1
1 8/4/2020 35 Portfolio 2 1
2 8/4/2020 30 Portfolio 3 1
3 8/4/2020 50 Portfolio 4 2
4 8/4/2020 50 Portfolio 5 2
Я хочу вставить строку перед запуском нового кода портфолио. В то же время вновь созданные строки должны содержать некоторые данные — всегда одни и те же.
Я хочу практически достичь этого:
Date Weight Subportfolio Portfolio Code Instrument Amount
0 8/4/2020 35 Portfolio 1 1
1 8/4/2020 35 Portfolio 2 1
2 8/4/2020 30 Portfolio 3 1
3 8/4/2020 1 Exposure 1000000
4 8/4/2020 50 Portfolio 4 2
5 8/4/2020 50 Portfolio 5 2
6 8/4/2020 2 Exposure 1000000
На самом деле я ничего не пробовал, так как не знаю, как с этим справиться. Я думал о чем-то с groupby (by: Portfolio code), но не уверен, как поступить.
Комментарии:
1.
Date
Уникальны лиProfolio Code
они?2. Дата всегда одна и та же
Ответ №1:
Один из общих подходов — concat
это сортировка:
(pd.concat([df,df[['Date','Portfolio Code']].drop_duplicates()
.assign(Instrument='Exposure',Amount=1000000)
])
.sort_values('Portfolio Code', kind='mergesort')
)
Вывод:
Date Weight Subportfolio Portfolio Code Instrument Amount
0 8/4/2020 35.0 Portfolio1 1
1 8/4/2020 35.0 Portfolio2 1
2 8/4/2020 30.0 Portfolio3 1
0 8/4/2020 NaN NaN 1 Exposure 1000000
3 8/4/2020 50.0 Portfolio4 2
4 8/4/2020 50.0 Portfolio5 2
3 8/4/2020 NaN NaN 2 Exposure 1000000