Как ранжировать строки в Python, используя панды в нескольких столбцах - PullRequest
0 голосов
/ 20 апреля 2019

предположим, у меня есть следующий кадр данных pandas, и мне нужно ранжировать строки в новых столбцах (я имел в виду, что если я хочу ранжировать 4 строки, я создам 4 новые строки)

на следующем кадре данных, у меня естьтри числовых столбца, мне нужно сравнить и ранжировать каждую строку, есть три строки, поэтому мне нужно создать три новых столбца, чтобы сравнить значение в каждом столбце со строкой

Revenue-SaleCount-salesprices-ranka-rankb-rankc

300------10-----------8000--------2--------1-----3

100----9000-----------1000--------1--------3-----2

как я могу сделать это спростой код и использование для цикла спасибо заранее

import pandas as pd

df = pd.DataFrame({'Revenue':[300,9000,1000,750,500,2000,0,600,50,500],
    'Date':['2016-12-02' for i in range(10)],
    'SaleCount':[10,100,30,35,20,100,0,30,2,20],
    'salesprices':[8000,1000,500,700,2500,3800,16,7400,3200,21]})


print(df)

1 Ответ

2 голосов
/ 20 апреля 2019

Мы можем написать цикл с string.ascii_lowercase и сделать каждый столбец с rank более axis=1

import string

cols = ['Revenue', 'SaleCount', 'salesprices']

for index, col in enumerate(cols):
    df[f'rank{string.ascii_lowercase[index]}'] = df[cols].rank(axis=1)[col]

Выход:

print(df)
   Revenue        Date  SaleCount  salesprices  ranka  rankb  rankc
0      300  2016-12-02         10         8000    2.0    1.0    3.0
1     9000  2016-12-02        100         1000    3.0    1.0    2.0
2     1000  2016-12-02         30          500    3.0    1.0    2.0
3      750  2016-12-02         35          700    3.0    1.0    2.0
4      500  2016-12-02         20         2500    2.0    1.0    3.0
5     2000  2016-12-02        100         3800    2.0    1.0    3.0
6        0  2016-12-02          0           16    1.5    1.5    3.0
7      600  2016-12-02         30         7400    2.0    1.0    3.0
8       50  2016-12-02          2         3200    2.0    1.0    3.0
9      500  2016-12-02         20           21    3.0    1.0    2.0

Примечание Я использовал f-string, который поддерживается только в Python версии> 3.4. В противном случае используйте .format форматирование строки следующим образом:

import string

cols = ['Revenue', 'SaleCount', 'salesprices']

for index, col in enumerate(cols):
    df['rank{}'.format(string.ascii_lowercase[index])] = df[cols].rank(axis=1)[col] 
...