Я пытаюсь отсортировать каждую строку pandas dataframe и получить индекс отсортированных значений в новом dataframe.Я мог бы сделать это медленно.Может кто-нибудь предложить улучшения с использованием распараллеливания или векторизованного кода для этого.Я разместил пример ниже.
data_url = 'https://raw.githubusercontent.com/resbaz/r-novice-gapminder-files/master/data/gapminder-FiveYearData.csv'
# read data from url as pandas dataframe
gapminder = pd.read_csv(data_url)
# drop categorical column
gapminder.drop(['country', 'continent'], axis=1, inplace=True)
# print the first three rows
print(gapminder.head(n=3))
year pop lifeExp gdpPercap
0 1952 8425333.0 28.801 779.445314
1 1957 9240934.0 30.332 820.853030
2 1962 10267083.0 31.997 853.100710
В результате я ищу это
tag_0 tag_1 tag_2 tag_3
0 pop year gdpPercap lifeExp
1 pop year gdpPercap lifeExp
2 pop year gdpPercap lifeExp
В этом случае, так какpop
всегда выше, чем gdpPercap
и lifeExp
, оно всегда идет первым.
Я мог бы добиться требуемого результата, используя следующий код.Но вычисление занимает больше времени, если df
имеет много строк / столбцов.
Может кто-нибудь предложить улучшение по этому
def sort_df(df):
sorted_tags = pd.DataFrame(index = df.index, columns = ['tag_{}'.format(i) for i in range(df.shape[1])])
for i in range(df.shape[0]):
sorted_tags.iloc[i,:] = list( df.iloc[i, :].sort_values(ascending=False).index)
return sorted_tags
sort_df(gapminder)