Специальные сортировочные столбцы данных - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть датафрейм ниже.

 d = {'id': ['x1', 'x2','x3','x4','x5','x6','x7'],'t1': [3,11,4,4,10,16,8],'t2':[20,14,4,15,22,11,4], 
 't3':[14,2,12,18,16,16,11]}
  df = pd.DataFrame(data=d)

Я хочу добавить столбец, который содержит сортировку по t1, тогда, если для двух строк мы равны t1, тогда мы можем посмотреть на t2 и сделатьто же самое.Мой столбец будет содержать.

df['calculated'] =[7,2,6,5,3,1,4]

Мой ожидаемый кадр данных будет:

 d = {'id': ['x1', 'x2','x3','x4','x5','x6','x7'],'t1': [3,11,4,4,10,16,8],'t2':[20,14,4,15,22,11,4], 
 't3':[14,2,12,18,16,16,11],'calculated':[7,2,6,5,3,1,4]}
  df = pd.DataFrame(data=d)

1 Ответ

1 голос
/ 27 сентября 2019

Используйте DataFrame.sort_values по всем столбцам для проверки, если они равны, и создайте новый столбец, например, по DataFrame.assign:

df1 = df.sort_values(['t1','t2','t3'], ascending=False).assign(new=range(1, len(df) + 1))
print (df1)
   id  t1  t2  t3  calculated  new
5  x6  16  11  16           1    1
1  x2  11  14   2           2    2
4  x5  10  22  16           3    3
6  x7   8   4  11           4    4
3  x4   4  15  18           5    5
2  x3   4   4  12           6    6
0  x1   3  20  14           7    7

Последний при необходимости исходный индексдобавить DataFrame.sort_index:

df1 = df1.sort_index()
print (df1)
   id  t1  t2  t3  calculated  new
0  x1   3  20  14           7    7
1  x2  11  14   2           2    2
2  x3   4   4  12           6    6
3  x4   4  15  18           5    5
4  x5  10  22  16           3    3
5  x6  16  11  16           1    1
6  x7   8   4  11           4    4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...