2016-11-28 84 views
0

我需要將以下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

回答

1

使用變換以行爲形式返回結果。

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

相關問題