#python #pandas #dataframe #sorting #classification
#питон #панды #фрейм данных #сортировка #классификация
Вопрос:
У меня есть pandas.DataFrame
форма. Я покажу вам простой пример.(На самом деле он состоит из сотен миллионов строк данных.). Я хочу изменить число по мере изменения буквы в столбце «2». Числа в оставшихся столбцах (столбцы:1,3 ~) не должны изменяться.
df= index 1 2 3 0 0 a100 1 1 1.04 a100 2 2 32 a100 3 3 5.05 a105 4 4 1.01 a105 5 5 155 a105 6 6 3155.26 a105 7 7 354.12 a100 8 8 5680.13 a100 9 9 125.55 a100 10 10 13.32 a100 11 11 5656.33 a156 12 12 456.61 a156 13 13 23.52 a1235 14 14 35.35 a1235 15 15 350.20 a100 16 16 30. a100 17 17 13.50 a100 18 18 323.13 a231 19 19 15.11 a1111 20 20 11.22 a1111 21
Вот мой ожидаемый результат:
df= index 1 2 3 0 0 0 1 1 1.04 0 2 2 32 0 3 3 5.05 1 4 4 1.01 1 5 5 155 1 6 6 3155.26 1 7 7 354.12 2 8 8 5680.13 2 9 9 125.55 2 10 10 13.32 2 11 11 5656.33 3 12 12 456.61 3 13 13 23.52 4 14 14 35.35 4 15 15 350.20 5 16 16 30 5 17 17 13.50 5 18 18 323.13 6 19 19 15.11 7 20 20 11.22 7 21
Как мне решить эту проблему?
Ответ №1:
Используйте последовательные группы, созданные методом сравнения, для неравных сдвинутых значений с суммой, а затем вычитайте 1:
#if column is string '2' df['2'] = df['2'].ne(df['2'].shift()).cumsum().sub(1) #if column is number 2 df[2] = df[2].ne(df[2].shift()).cumsum().sub(1)
print (df) index 1 2 3 0 0 0.00 0 1 1 1 1.04 0 2 2 2 32.00 0 3 3 3 5.05 1 4 4 4 1.01 1 5 5 5 155.00 1 6 6 6 3155.26 1 7 7 7 354.12 2 8 8 8 5680.13 2 9 9 9 125.55 2 10 10 10 13.32 2 11 11 11 5656.33 3 12 12 12 456.61 3 13 13 13 23.52 4 14 14 14 35.35 4 15 15 15 350.20 5 16 16 16 30.00 5 17 17 17 13.50 5 18 18 18 323.13 6 19 19 19 15.11 7 20 20 20 11.22 7 21
Комментарии:
1. В примере вывода OP строки 7-10 отличаются от строк 0-2… — это похоже на рецепт последовательных групп, который, как я знаю, вы знаете и, вероятно, можете найти 🙂
2. Большое спасибо. Я решил эту проблему. Хорошего дня
3. @JonClements — ищу обманщика.