Рассчитайте% разницы в Pandas и примените особые условия к результатам - PullRequest
2 голосов
/ 26 марта 2020

Я новичок в python и пытаюсь получить% различий между пользователями каждую неделю, начиная с самой старой. Итак, пытаясь вычислить так (этот расчет взят из Таблицы, но я хочу, чтобы python делал аналогично):

3to2WeeksA go разница:

IF [Users3weeksAgo] != 0 THEN ([Users2weeksAgo]-[Users3weeksAgo])/[Users3weeksAgo]
END

input.csv:

id    ThisWeekUsers LastWeekUsers   Users2weeksAgo  Users3weeksAgo
 1           91              20          8               15
 2            4              1           0               0
 3            4              1           3               14
 ...

Я не смог получить строго отформатированный вывод. Мне нужно, чтобы мои результаты отображались ниже: Output.csv

id    ThisWeekUsers LastWeekUsers   Users2weeksAgo  Users3weeksAgo 3to2WeeksAgo 2toLastWeek LastToThisWeek
 1           91              20          8               15            -46.7%      150.0%         355.0%
 2            4              1           0               0                                        300.0%
 3            4              1           3               14            -78.6%      -66.7%         300.0%
 ...

Мой код:

 import pandas as pd

 df = pd.read_csv('path/to/my/input.csv')

 df['3to2WeeksAgo'] = df['Users2weeksAgo']-df['Users3weeksAgo']/df['Users3weeksAgo']


 df.to_csv('path/to/my/output.csv')

Кроме того, я хочу убедиться, что в NaN или inf нет значений мой вывод и сохранить формат строго как 00.0

Это результаты при сравнении 3 недели go с 2 неделями go с кодом выше:

enter image description here

Приведенные выше результаты должны показывать:

3to2WeeksAgo
   -46.7% 

   -78.6% 

Спасибо за вашу помощь заранее!

РЕДАКТИРОВАТЬ:

Спасибо за вашу помощь Kranthi! Я запустил этот код, и он, кажется, работает. Однако у меня есть дополнительный вопрос. Как я могу предотвратить показ 0.0 при сравнении 0 из одной недели с 0 в другой неделе. То же самое для значения 'inf'. Не могли бы вы помочь мне не получить значения для этих случаев? См. Ниже:

enter image description here

1 Ответ

2 голосов
/ 26 марта 2020
import pandas as pd

df = pd.read_csv('path/to/my/input.csv')

df['3to2WeeksAgo'] = np.round(100 * (df['Users2weeksAgo'] - df['Users3weeksAgo']) / df['Users3weeksAgo'], 1)

То же самое для 2toLastWeek, LastToThisWeek

df = df.fillna(0)
df.to_csv('path/to/my/output.csv')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...