亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 groupby 中對多索引執行功能

在 groupby 中對多索引執行功能

一只名叫tom的貓 2022-04-27 16:08:30
我有一個帶有 MultiIndex 的數據框。這是一個最小的工作示例:df = pd.DataFrame({'note':[1,1,1,2,2,2,2],'t': [0.5,0.7,1.2,0.3,0.9,1.3,1.7],'val':[1,-1,0,0,1,0,0]})dfs = df.set_index(['note','t'])這使>>> dfs          valnote t1    0.5    1     0.7   -1     1.2    02    0.3    0     0.9    1     1.3    0     1.7    0我想要的是獲得(a)最小值和(b)t每組索引中的第一個值:note min  first1    0.5  0.52    0.3  0.3我可以對原始數據框進行分組df,其中note和t是列而不是索引:df.groupby('note').agg({'t': [min, lambda x: list(x)[0]]})但我寧愿不執行reset_index()另一個set_index()將數據幀恢復到 MultiIndex 版本的操作。我該怎么做呢?該agg函數僅適用于列,而不適用于索引。
查看完整描述

2 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

這是可能的,但不是很干凈:


df = (dfs.index.get_level_values(1).to_series()

         .groupby(dfs.index.get_level_values(0))

         .agg(['min', 'first']))

print (df)

      min  first

note            

1     0.5    0.5

2     0.3    0.3

df = dfs.reset_index('t').groupby(level=0)['t'].agg(['min', 'first'])

print (df)

      min  first

note            

1     0.5    0.5

2     0.3    0.3


查看完整回答
反對 回復 2022-04-27
?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

您可以直接在多索引上工作。用于to_series轉換dfs.index為一系列多索引和元組值。接下來,切片以獲取元組值的最后一個元素。之后就做groupby和level=0喜歡agg常規專欄


dfs.index.to_series().str[-1].groupby(level=0).agg(['min', 'first'])


Out[463]:

      min  first

note

1     0.5    0.5

2     0.3    0.3


查看完整回答
反對 回復 2022-04-27
  • 2 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號