В Python, как сделать groupby + упорядочить + изменить (ifelse), как R? - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть следующий набор данных:

ID      Date     Flag      Price     Flag_Amt     Factor
1      1/1/10     NA        20          NA          NA
1      1/2/10     3         20.2        1.05        .5
1      1/3/10     NA        19.2        NA          NA
2      1/1/10     5         12          6.50        1.3
2      1/2/10     NA        12.6        NA          NA
2      1/2/10     NA        13          NA          NA 
3      1/1/10     NA        100         NA          NA
3      1/2/10     5         88          16.7        .88
3      1/3/10     NA        90          NA          NA

, и у меня есть следующий код R dplyr:

df = df %>% group_by(ID) %>% arrange(Date) %>% mutate(New_Factor = ifelse(Flag == 5, (Flag_Amt/Price), Factor))

, который даст следующие результаты:

ID      Date     Flag      Price     Flag_Amt     Factor    New_Factor
1      1/1/10     NA        20          NA          NA         NA 
1      1/2/10     3         20.2        10.1        .5         .5
1      1/3/10     NA        19.2        NA          NA         NA        
2      1/1/10     5         12          6.50        1.3        1.85
2      1/2/10     NA        12.6        NA          NA         NA
2      1/2/10     NA        13          NA          NA         NA
3      1/1/10     NA        100         NA          NA         NA        
3      1/2/10     5         88          16.7        .88        5.27
3      1/3/10     NA        90          NA          NA         NA

Тем не менее, я испытываю затруднения, пытаясь воспроизвести это в пандах Python.

Ниже приведен код, который я пробовал, и ошибка, которую я получил:

df['New_Factor'] = df.groupby(['ID']).apply(lambda x: (x.Price/x.Flag_Amt) if x.Flag == 5 else (x.Factor))) 

Ошибка:

Значение истинности Серии неоднозначно,Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

Есть ли какой-то другой способ, возможно, с использованием .transform() вдольс np.where() сделать это?

Любая помощь приветствуется.

Спасибо

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