2016-10-06 74 views
-1

這是我在stackoverflow的第一個問題,我在python編程領域非常新。如何根據id列添加並反轉新列

image of what I'm trying to do

正如你可以在圖片中列「ID」和「期間」看到中給出。這是一個csv數據集,我想添加一個名爲「newColumn」的新列,其中「period」的數字根據其「id值」以相反的順序排列。我希望你能理解我的問題。

預先感謝您。

+1

歡迎來到StackOverflow。有關如何提出良好問題的提示,請參閱幫助部分。最重要的是在你的案例中:問題必須是獨立的,所以不要使用外部鏈接到圖像,只需在問題本身發佈代碼。這有兩個原因:我們不喜歡點擊,鏈接將來可能會中斷。 – wvdz

+0

謝謝你的提示。 在我看來,圖像可以解釋問題比只有單詞可以做的更容易。特別是,當你是一個新的主題。爲了將來,我會看看我能做些什麼。 – atr4xxas

回答

1

您需要sort_values

print (df) 
    id period 
0 1  1 
1 1  2 
2 1  3 
3 2  1 
4 2  2 
5 2  3 
6 3  1 
7 3  2 
8 3  3 

print (df.sort_values(by=['id','period'], ascending=[True, False])) 
    id period 
2 1  3 
1 1  2 
0 1  1 
5 2  3 
4 2  2 
3 2  1 
8 3  3 
7 3  2 
6 3  1 

然後,如果需要創建新的列,排序列由values不按索引排列轉化爲numpy array

df['new'] = df.sort_values(by=['id','period'], ascending=[True, False])['period'].values 
print (df) 
    id period new 
0 1  1 3 
1 1  2 2 
2 1  3 1 
3 2  1 3 
4 2  2 2 
5 2  3 1 
6 3  1 3 
7 3  2 2 
8 3  3 1 
+0

非常感謝你!那正是我期待的! – atr4xxas

1

財產以後這樣的:

def f(x, y): 
    if x[0] < y[0] or x[0] == y[0] and x[1] > y[1]: 
     return -1 
    return 1 


d = [1, 2, 3, 4, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4] 
o = [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3] 
new = zip(o, d) 
new.sort(f) 
print new 
# [(1, 4), (1, 3), (1, 2), (1, 1), (2, 7), (2, 6), (2, 5), (2, 4), (2, 3), (2, 2), (2, 1), (3, 4), (3, 3), (3, 2), (3, 1)] 
print zip(*new)[1] 
# (4, 3, 2, 1, 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, 1)