Я пытаюсь передать список номеров фреймворку данных. Результат, который я хочу, выглядит следующим образом:
Unit Ida
1
Parcel 1 2
Parcel 2 2
Parcel 3 2
3
4
Parcel 1 5
Parcel 2 5
Первый код, который я использовал, выглядит следующим образом:
Address['Ida'] = ''
Ida = 1
Address['Ida'][0] = Ida
for x in range(len(Address)-1):
if str(Address['Unit'][x+1]) == ('Parcel 1' or ''):
Ida = Ida + 1
Address['Ida'][x+1] = Ida
else:
Address['Ida'][x+1] = Ida
Но скорость моего кода очень-очень низкая. Итак, есть ли более эффективный способ сделать это в пандах?






IIUC с использованием cumsum с shift
((df.Unit=='')|(df.Unit=='Parcel1')).cumsum()
Out[129]:
0 1
1 2
2 2
3 2
4 3
5 4
6 5
7 5
Name: Unit, dtype: int32
@yuchenhuang это векторизованная функция, что означает, что она не будет проверять строку за строкой, в вашем цикле for вы прошли каждую строку
Спасибо за ваше время. Я думаю, это означает, что нам лучше использовать для чего-то функцию numpy или pandas, а не напрямую использовать python.
@yuchenhuang, если вы выполняете проверку строка за строкой, цикл for не рекомендуется
Большое спасибо! Я задаю новый вопрос о том, как заменить один цикл for друг на друга, не могли бы вы помочь мне найти простой способ?
Мне действительно помогает !!! Спасибо, и скорость такая быстрая! Если у вас есть время, не могли бы вы рассказать мне, почему это так быстро и почему мой код такой медленный? Я очень любопытная..