мой фрейм данных выглядит следующим образом:
![Short View of Data](https://i.stack.imgur.com/QR4Zy.png)
Элемент в PlantProduct (означает завод);может иметь несколько номеров материалов Что я хочу сделать:
- Сгруппировать фрейм данных по PlantProduct и MaterialNumber, другими словами, разделить их на фреймы данных.
- Если длина элемента члена группы меньше 10, чем отбросить его
- Так что в конце работы у меня должен быть вид элементов списка, который содержит только этот видфреймы данных:
![grouped data](https://i.stack.imgur.com/jC4OK.png)
После получения этого фрейма данных я собираюсь выполнить больше дополнительных операций;такие как графики и прогнозирование временных рядов по всем элементам списка (показано на рисунке -2)
Я сделал следующее:
df.groupby(by=['PlantProduct','MaterialNumber']).apply(lambda x:len(x)>10)
Однако этот скрипт создаетсгруппированный объект фрейма данных, и я не могу выполнить с ним никаких операций.
, чтобы помочь мне записать свой сценарий здесь, но я должен сделать это и на python, как вы можете догадаться, я неЭксперт по питону.
Мой код R:
#split 1st due to PlantProduct
mylist <- split(res2, res2$PlantProduct)
#second split due to MaterialNumber
for(name in names(mylist))
mylist[[name]] <- split(mylist[[name]], mylist[[name]]["MaterialNumber"])
mylist[[name]] <- mylist[[name]][sapply(mylist[[name]], function(x) nrow(x)[[1]]) > 10]
}
#Encoding 0 values with NA, all over the list elements
for(name in names(mylist)) {
for(name2 in names(mylist[[name]]))
{
mylist[[name]][[name2]][,4] <- ifelse(mylist[[name]][[name2]][,4] == 0, NA, mylist[[name]][[name2]][,4])
}
}
#creating a date index column and joining it with the list element
for(name in names(mylist)) {
for(name2 in names(mylist[[name]]))
{
mydate <- data.frame(seq(min(as.Date(mylist[[name]][[name2]][,3])), as.Date('2018-05-01'), by = "month"))
colnames(mydate) <- "ds"
mylist[[name]][[name2]] <- left_join(mydate, mylist[[name]][[name2]], "ds")
rm(mydate)
}
}
#time series forecasting on individual list elements
for(name in names(mylist)) {
for(name2 in names(mylist[[name]]))
{
m <- prophet(mylist[[name]][[name2]])
future <- make_future_dataframe(m, periods = 1, freq = "month")
forecast <- predict(m, future)
a <- data.frame(tail(forecast[c('ds', 'yhat', 'yhat_lower', 'yhat_upper')], n = 365))
a$ds <- as.Date(a$ds, "%Y-%m-%d")
mylist[[name]][[name2]] <- left_join(a, mylist[[name]][[name2]], "ds")
rm(m, future, forecast, a)
}
}