我有一个多索引的数据帧。下面是一个最小的工作示例:
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
val
note t
1 0.5 1
0.7 -1
1.2 0
2 0.3 0
0.9 1
1.3 0
1.7 0
我想得到的是(a)最小值和(b)每组t
索引中的第一个值:
note min first
1 0.5 0.5
2 0.3 0.3
我可以对原始数据帧df
执行groupby,其中note
和t
是列,而不是索引:
df.groupby('note').agg({'t': [min, lambda x: list(x)[0]]})
但是我不希望在执行reset_index()
之后再执行另一个set_index()
来将数据帧恢复到多索引版本。我该怎么做?agg
函数只适用于列,而不适用于索引。你知道吗
有可能,但不是很干净:
你可以直接在多重索引上工作。使用
to_series
将dfs.index
转换为一系列多索引和元组值。接下来,切片以获取元组值的最后一级。在那之后,只需对level=0
和agg
像正则列那样执行groupby
相关问题 更多 >
编程相关推荐