在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转换成熊猫。请让我知道是否有人做到了。
答
使用变换以行为形式返回结果。
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
预期成果是如何,我可以用max函数来实现上述SAS相当于大熊猫完蛋了......我的意思是只需要上述SAS转换成大熊猫 – user07
的预期结果是很明显的约翰·高尔特,刚刚看了问题/ SQL代码... –
如果是这样,OP的示例示例工作解决方案不正确。如果他能给出预期的输出结果,那就应该纠正他/你的理解。希望有所帮助。 – Zero