【发布时间】:2021-06-16 08:06:06
【问题描述】:
我的数据名如下:
import pandas as pd
df = pd.DataFrame({
'A': [1, 1, 1, 2, 2, 2],
'B': [1, 2, 3, 4, 5, 6],
'C': [4, 5, 6, 7, 8, 9],
})
现在我想对每个组产生两个值进行分组和聚合。结果应该类似于以下内容:
expected = df.groupby('A').agg([min, max])
# B C
# min max min max
# A
# 1 1 3 4 6
# 2 4 6 7 9
但是,在我的例子中,我没有两个不同的函数 min 和 max,而是有一个函数可以同时计算这两个值:
def minmax(x):
"""This function promises to compute the min and max in one go."""
return min(x), max(x)
现在我的问题是,如何使用这个 one 函数为每个组生成两个聚合值?
这有点与this answer 有关,但我不知道该怎么做。我能想到的最好的办法是使用双重嵌套的apply,但这不是很优雅,而且它会在行而不是列上产生多索引:
result = df.groupby('A').apply(
lambda g: g.drop(columns='A').apply(
lambda h: pd.Series(dict(zip(['min', 'max'], minmax(h))))
)
)
# B C
# A
# 1 min 1 4
# max 3 6
# 2 min 4 7
# max 6 9
【问题讨论】:
标签: python pandas pandas-groupby aggregate