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

时间:2016-11-28 18:16:59

标签: python pandas numpy sas

我需要将以下SAS代码转换为python pandas。我没有得到我所尝试的确切结果。

以下SAS代码转换为pandas:

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转换为熊猫。如果有人这样做,请告诉我。

1 个答案:

答案 0 :(得分:1)

使用transform以行方式返回结果。

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