У меня есть следующий набор данных:
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()
сделать это?
Любая помощь приветствуется.
Спасибо