2016-10-06 4 views
-1

Это мой первый вопрос в stackoverflow, и я довольно новичок в области программирования с помощью python.Как добавить и отменить новый столбец в соответствии с столбцом id

image of what I'm trying to do

Как вы можете видеть в колонке картина «ид» и «период» приведены. Это набор данных csv, и я хочу добавить новый столбец с именем «newColumn», где числа из «периода» находятся в обратном порядке в соответствии с их «значениями 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 

Затем, если нужно создать новый столбец, конвертировать отсортированный столбец numpy array по values для не выравнивать по индексу:

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

Somthing как это:

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) 

 Смежные вопросы

  • Нет связанных вопросов^_^