Pandas вставка строк в мультииндексном фрейме данных через lo c больше не поддерживается - PullRequest
0 голосов
/ 09 июля 2020

У меня есть такой pandas фрейм данных:

pd.DataFrame.from_dict({(4.0,
  'Net Sales'): {('details',
   pd.Timestamp('2020-04-01 00:00:00'),
   'Apr_FY21'): 1000, ('details',
   pd.Timestamp('2020-05-01 00:00:00'),
   'May_FY21'): 1000, ('details',
   pd.Timestamp('2020-06-01 00:00:00'),
   'Jun_FY21'): 1000},
 (5.0,
  'Margin'): {('details',
   pd.Timestamp('2020-04-01 00:00:00'),
   'Apr_FY21'): 20, ('details',
   pd.Timestamp('2020-05-01 00:00:00'),
   'May_FY21'): 15, ('details',
   pd.Timestamp('2020-06-01 00:00:00'),
   'Jun_FY21'): 10}}).T

Я хочу добавить вычисляемую строку, которая, к сожалению, больше не поддерживается через lo c. Какая альтернатива?

 df2.loc[(5.1,'Margin %'),'details']=(np.divide(df2.loc[(5,'Margin)'),'details'],(df2.loc[(4,'Net Sales'),'details']))*100).values

KeyError: 'Передача списков лайков в .lo c или [] с отсутствующими метками больше не поддерживается, см. https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#deprecate -lo c -reindex-listlike '

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

В вашем выписке действительно есть опечатка:

df.loc[(5.1,'Margin %'),'details']=(np.divide(df.loc[(5,'Margin)'),'details'],(df.loc[(4,'Net Sales'),'details']))*100).values

----------------------------- -------------------------------------------------- ------------- ^

Дополнительный ')' не требуется

Это работает:

 df2.loc[(5.1,'Margin %'),'details']=(np.divide(df2.loc[(5,'Margin'),'details'],(df2.loc[(4,'Net Sales'),'details']))*100).values

Вывод:

                 details                      
              2020-04-01 2020-05-01 2020-06-01
                Apr_FY21   May_FY21   Jun_FY21
4.0 Net Sales     1000.0     1000.0     1000.0
5.0 Margin          20.0       15.0       10.0
5.1 Margin %         2.0        1.5        1.0
0 голосов
/ 09 июля 2020

Создайте его как серию, а затем добавьте в DataFrame:

s = pd.Series((np.divide(df2.loc[(5.0,'Margin'),'details'],(df2.loc[(4.0,'Net Sales'),'details']))*100).values, 
              index=df2.columns, 
              name = (5.1,'Margin %')
             )
df2 = df2.append(s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...