Простой Pandas DF расчет потерян в бесконечности - PullRequest
0 голосов
/ 23 мая 2018

Настройка

У меня df среднего размера (600 К на 40), и я пытаюсь сложить значения рядов по элементам (по индексу) вместе, а затем создать новый столбец с последующими значениями.Однако это занимает более 24 часов и еще не закончено.

Сначала я делаю две серии:

(из исходного df с некоторыми ограничениями)

 Series1 = df.loc[df['ColumnX'] == 5, 'ColumnY']
 Series2 = df.loc[df['ColumnX'] == 6, 'ColumnY']

Затем я добавляю их вместе и вставляю как новый столбец в оригинал.df:

 df['column1plus2'] = Series1 + Series2

Просто на сервере со слабой средой не должно занимать больше 24 часов, не так ли?Я делаю что-то в корне неправильно?

1 Ответ

0 голосов
/ 23 мая 2018

Из-за взаимоисключающего характера вашего выбора (5 против 6) индексы всех строк в Series1 отличаются от индексов всех строк в Series2.Оператор + использует выравнивание данных , чтобы найти совпадающие строки, и он не может.Таким образом, вместо этого он создает соответствующие макеты со значениями NaN и добавляет их к значениям из вашей серии.(Результат также, конечно, равен NaN.) Например, если у вас была строка # 10 в Series1 (со значением, скажем, 3.14), в * 1013 не будет строки с таким же номером.*.Панды создадут строку # 10 в Series2 и установят ее значение на NaN, потому что она не знает ничего лучше.Результат суммирования в строке # 10 теперь равен 3.14+NaN=NaN.

Это объясняет, почему ваш код неверен , но не обязательно, почему он медленный.Я предполагаю, что выравнивание данных является очень медленной операцией при наличии стольких пропущенных значений.

Вы имели в виду складывать Series1 и Series2 вместо их арифметического добавления?Если это так, вы должны сделать pd.concat[Stack1,Stack2]).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...