這是我在stackoverflow的第一個問題,我在python編程領域非常新。如何根據id列添加並反轉新列
image of what I'm trying to do
正如你可以在圖片中列「ID」和「期間」看到中給出。這是一個csv數據集,我想添加一個名爲「newColumn」的新列,其中「period」的數字根據其「id值」以相反的順序排列。我希望你能理解我的問題。
預先感謝您。
這是我在stackoverflow的第一個問題,我在python編程領域非常新。如何根據id列添加並反轉新列
image of what I'm trying to do
正如你可以在圖片中列「ID」和「期間」看到中給出。這是一個csv數據集,我想添加一個名爲「newColumn」的新列,其中「period」的數字根據其「id值」以相反的順序排列。我希望你能理解我的問題。
預先感謝您。
您需要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
非常感謝你!那正是我期待的! – atr4xxas
財產以後這樣的:
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)
歡迎來到StackOverflow。有關如何提出良好問題的提示,請參閱幫助部分。最重要的是在你的案例中:問題必須是獨立的,所以不要使用外部鏈接到圖像,只需在問題本身發佈代碼。這有兩個原因:我們不喜歡點擊,鏈接將來可能會中斷。 – wvdz
謝謝你的提示。 在我看來,圖像可以解釋問題比只有單詞可以做的更容易。特別是,當你是一個新的主題。爲了將來,我會看看我能做些什麼。 – atr4xxas