[英]Pandas inserting rows in multiindex dataframe through loc no longer supported
我有一個 pandas dataframe 像這樣:
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
我想添加一個計算行,不幸的是,loc 不再支持該行。 什么是替代品?
df2.loc[(5.1,'Margin %'),'details']=(np.divide(df2.loc[(5,'Margin)'),'details'],(df2.loc[(4,'Net Sales'),'details']))*100).values
KeyError:'不再支持將 list-likes 傳遞給.loc 或帶有任何缺失標簽的 [],請參閱https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#deprecate-loc-reindex -listlike'
將其創建為一個系列,然后將 append 創建為 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)
您的陳述中實際上有一個錯字:
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
Output:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.