具有以下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
在单独的列中。
将lambda与group by一起应用显示了具有以下代码的多索引数组:
g = df.groupby(['animal', 'type'])
g.apply(lambda g: np.where (g.type == 'X', g.A.max(), g.A.min()))
有没有办法把它转换成一个序列,可以作为一列添加到df中......比如说使用transform
?
3条答案
按热度按时间t2a7ltrp1#
这就是你想要的吗?
6kkfgxo02#
@哈利绘图仪:Thx的
name
信息。这是美妙的看到,名称的组传播作为一个元组。如果有人不想使用一个函数,以下将工作:vhmi4jdf3#
我认为从性能方面考虑,最好构建临时列,而不是通过groupby进行迭代: