在Pandas中添加一个新列作为现有列的最大值

问题描述:

我需要将以下SAS代码转换为python熊猫。我没有得到我所尝试过的确切结果。在Pandas中添加一个新列作为现有列的最大值

下面SAS代码转换成大熊猫:

proc sql; 
create table t1 as 
select 
    c1, c2, c3, c4, c5, flag, max(flag) as MAX_flag 
from t1 
group by c1, c2, c3, c5; 
run; 

我想是这样的:它的工作在这个例子中,但与大型数据集,我越来越不匹配。

import pandas as pd 
import numpy as np 
df = pd.DataFrame({'A':['z','y','x','x','z','y','z','y','x','z',], 
       'B':[0,1,2,0,1,2,0,1,2,0], 
       'ID':[0,1,0,1,0,1,0,2,3,4]}) 
df=df.sort_values(['A','B','ID'], ascending=[True,True,False]) 
df.loc[:,'Max']=df.groupby(['A','B'])['ID'].cummax() 

我想将上面的SAS转换成熊猫。请让我知道是否有人做到了。

+0

预期成果是如何,我可以用max函数来实现上述SAS相当于大熊猫完蛋了......我的意思是只需要上述SAS转换成大熊猫 – user07

+0

的预期结果是很明显的约翰·高尔特,刚刚看了问题/ SQL代码... –

+0

如果是这样,OP的示例示例工作解决方案不正确。如果他能给出预期的输出结果,那就应该纠正他/你的理解。希望有所帮助。 – Zero

使用变换以行为形式返回结果。

In [27]: df 
Out[27]: 
    A B ID 
0 z 0 0 
1 y 1 1 
2 x 2 0 
3 x 0 1 
4 z 1 0 
5 y 2 1 
6 z 0 0 
7 y 1 2 
8 x 2 3 
9 z 0 4 

In [28]: df['max'] = df.groupby(['A', 'B'])['ID'].transform(np.max) 

In [29]: df 
Out[29]: 
    A B ID max 
0 z 0 0 4 
1 y 1 1 2 
2 x 2 0 3 
3 x 0 1 1 
4 z 1 0 0 
5 y 2 1 1 
6 z 0 0 4 
7 y 1 2 2 
8 x 2 3 3 
9 z 0 4 4 
+0

的相同结果,谢谢它的工作。 ..什么是在pandas中添加新列的正确和最好的方法... df ['max']或df.loc [:,'Max']? – user07

+0

可以请你更新你的答案w.r.t到我的问题 – user07