Сбросить значения NaN по группам - PullRequest
0 голосов
/ 25 августа 2018

У меня есть фрейм данных со столбцом «Materiais», который указывает код продукта, столбец «Значения», который соответствует значениям продукта, и столбцы «Месяц», которые соответствуют его месяцам.

       Year   Month Materiais  Values
0      2018    M1     52745     NaN
1      2018    M2     52745     NaN
2      2018    M3     52745     NaN
3      2018    M4     52745     NaN
4      2018    M5     52745     NaN
5      2018    M6     52745     NaN
6      2018    M7     52745     NaN
7      2018    M1     58859     NaN
8      2018    M2     58859     NaN
9      2018    M3     58859     NaN
10     2018    M4     58859     NaN
11     2018    M5     58859     300
12     2018    M6     58859     NaN
13     2018    M7     58859     NaN
14     2018    M1     57673     NaN
15     2018    M2     57673     100
16     2018    M3     57673     NaN
17     2018    M4     57673     150

1-) Я хотел бы, чтобы в этом кадре данных были только продукты, у которых было хотя бы значение в течение одного месяца.

Поэтому моя идея состоит в том, чтобы сгруппировать все похожие коды продуктов и проверить, есть лихотя бы одно значение != NaN.

Для группировки я использую эту функцию:

df = df_demand.groupby(['Materiais'], sort=False, as_index=False)
  • Хотелось бы узнать, как создать условие для примененияdropna (), только для продуктов со значениями NaN за все месяцы?

Result 1

2-) Отфильтруйте месяцы, по крайней мере, как минимумодно значение != NaN', используя аналогичный подход:

df = df_demanda.groupby(['Month'], sort=False, as_index=False)

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Во-первых, вы хотите получить агрегат, который указывает, имеет ли данный продукт ненулевое значение (наны не являются «правдивыми»):

materiais_any_non_null = df.groupby('Materiais')['Values'].transform('any')

Затем просто замаскируйте ваш df с помощьючто:

df[materiais_any_non_null]

Результат:

    Year Month  Materiais  Values
7   2018    M1      58859     NaN
8   2018    M2      58859     NaN
9   2018    M3      58859     NaN
10  2018    M4      58859     NaN
11  2018    M5      58859   300.0
12  2018    M6      58859     NaN
13  2018    M7      58859     NaN
14  2018    M1      57673     NaN
15  2018    M2      57673   100.0
16  2018    M3      57673     NaN
17  2018    M4      57673   150.0
0 голосов
/ 25 августа 2018
  1. Это приведет к удалению строк со значениями = NaN:

newdf = df.dropna (subset = ['Values'])

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