Сортировка по убыванию или возрастанию значений с плавающей запятой в массиве данных
Как сортировать по убыванию или возрастанию где число 1,023,222 считалось бы больше чем 200,333? А также если перед числом стоит $1,023,222?
Я попробовал сделать так:
price_list = []
for index, row in top_us_2022.iterrows():
price = str(row[3])
price_n = price.replace('$', '').replace(',', '').replace('nan', '0')
price_int = int(price_n)
price_list.append(price_int)
price_list.sort()
Но как это сделать в рамках ВСЕЙ таблицы, а не одного столбца?
(то есть сортировка по этому столбцу, читая всю таблицу)
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Примерно так, как уже и подсказали в комментариях - заменой лишних символов:
import pandas as pd
df = pd.DataFrame({
'Total Gross': [
'$1,000,000',
'$500,000',
'$200'
],
'Order': [
1,
2,
3
]
})
df['for_sort'] = pd.to_numeric(df['Total Gross'].str.replace(r'[$,]', '', regex=True))
df.sort_values('for_sort')
Вывод:
| index | Total Gross | Order | for_sort |
|---|---|---|---|
| 2 | $200 | 3 | 200 |
| 1 | $500,000 | 2 | 500000 |
| 0 | $1,000,000 | 1 | 1000000 |
Я использовал to_numeric, потому что непонятно на выходе будут целые значения или с плавающей точкой, эта функция с обоими вариантами должна нормально справиться.