我正在尝试创建列来表示组中每一行后的最小/最大值。
原DF
╔═════════════╦════════════╗ ║ 颜色 ║ 面板 ║ 结果 ║ ╠═══════╬═══════╬════════╣ ║ 蓝色 ║ b ║ 4 ║ ║ 蓝色 ║ b ║ 3 ║ ║ 蓝色 ║ b ║ 3 ║ ║ 蓝色 ║ b ║ 5 ║ ║ 蓝色 ║ b ║ 4 ║ ║ 蓝色 ║ b ║ 7 ║ ║ 蓝色 ║ b ║ 1 ║ ║ 蓝色 ║ b ║ 5 ║ ║ 蓝色 ║ b ║ 3 ║ ║ 蓝色 ║ b ║ 2 ║ ╚
═════════════════════════╝尝试获得的结果
╔═════════════╦═══════════════════════╗ ║ 颜色 ║ 面板 ║ 结果 ║ 分钟 ║ 最大 ║ ╠═══════╬═══════╬════════╬═════╬═════╣ ║ 蓝色 ║ b ║ 4 ║ 4 ║ 4 ║ 4 ║ ║ 蓝色 ║ b ║ 3 ║ 3 ║ 4 ║ ║ 蓝色 ║ b ║ 3 ║ 3 ║ 4 ║ ║ 蓝色 ║ b ║ 5 ║ 3 ║ 5 ║ ║ 蓝色 ║ b ║ 4 ║ 3 ║ 5 ║ ║ 蓝色 ║ b ║ 7 ║ 3 ║ 7 ║ ║ 蓝色 ║ b ║ 1 ║ 1 ║ 7 ║ ║ 蓝色 ║ b ║ 5 ║ 1 ║ 7 ║ ║ 蓝色 ║ b ║ 3 ║ 1 ║ 7 ║ ║ 蓝色 ║ b ║ 2 ║ 1 ║ 7 ║ ╚════════════════════════════════════╕
data = {'color':['blue','blue','blue','blue','blue','blue','blue','blue','blue','blue'],
'panel':['b','b','b','b','b','b','b','b','b','b'],
'result':[4,3,3,5,4,7,1,5,3,2]}
请指教。谢谢
你想要cummin
和cummax
data.result.cummin()
data.result.cummax()
将GroupBy.agg
与GroupBy.cummax
一起使用GroupBy.cummin
并分配给新列(这是可能的,因为输出是与原始列大小相同的数据帧):
df[['min','max']] = df.groupby(['color','panel'])['result'].agg(['cummin','cummax'])
print (df)
color panel result min max
0 blue b 4 4 4
1 blue b 3 3 4
2 blue b 3 3 4
3 blue b 5 3 5
4 blue b 4 3 5
5 blue b 7 3 7
6 blue b 1 1 7
7 blue b 5 1 7
8 blue b 3 1 7
9 blue b 2 1 7