【发布时间】:2021-12-15 02:41:14
【问题描述】:
有以下df
import numpy as np
import random
i = ['dog', 'cat', 'rabbit', 'elephant'] * 20
df = pd.DataFrame(np.random.randn(len(i), 3), index=i, \
columns=list('ABC')).rename_axis('animal').reset_index()
df.insert(1, 'type', pd.Series(random.choice(['X', 'Y']) \
for _ in range(len(df))))
如果动物的类型是 X,我想要 A 列的 max ... 否则 A 列的 min,在单独的列中。
Apply lambda with group by 显示多索引数组,代码如下:
g = df.groupby(['animal', 'type'])
g.apply(lambda g: np.where (g.type == 'X', g.A.max(), g.A.min()))
有没有办法把它转换成一个系列,可以作为一列添加到 df...比如使用transform?
【问题讨论】: