Вставка строк на основе некоторого условия, заполнение данных

#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