簡體   English   中英

具有多索引的 Pandas Dataframe 中 2 列之間的差異

[英]difference between 2 columns in Pandas Dataframe with multiindex

我有一個 Pandas DataFrame,它的列是 MultiIndex,有 2 個級別,如下所示:

index = ['monday','tuesday','wednesday']
tuples = [('yesterday','travel'),('yesterday','food'),('today','travel'),('today','food')]
columns = pd.MultiIndex.from_tuples(tuples,names=[None,'category'])
df = pd.DataFrame(np.random.randint(low=0, high=10, size=(3, 4)), index=index, columns=columns)

我只是想將每個“旅行”和“食物”列的差異存儲到一個新的頂級列中——例如“差異”——在“昨天”和“旅行”旁邊

diff = t['today'] - t['yesterday']

將返回我感興趣的底層 DataFrame,但我無法弄清楚如何將它正確放置在整個 DataFrame 中

就像是:

pd.concat([df,diff],axis=1)

產生一個有趣(但不正確)的結果

一種方法是將diff的列設為MultiIndex例如:

diff = df['today'] - df['yesterday']
diff.columns = pd.MultiIndex.from_tuples([('diff',col) for col in diff.columns])

然后當你使用concat ,它給出:

print (pd.concat([df,diff],axis=1))
          yesterday       today        diff     
category     travel food travel food travel food
monday            8    7      7    1     -1   -6
tuesday           1    3      0    8     -1    5
wednesday         6    4      5    6     -1    2

編輯:另一種不使用MultiIndex是直接執行創建列的操作:

df[[('diff','travel'),('diff','food')]] = df['today'] - df['yesterday']

以及更通用的方法,您可以使用get_level_values

df[[('diff',col) for col in df.columns.get_level_values(1).unique()]] = df['today'] - df['yesterday']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM