Поиск диапазонов нулевых значений в столбце — Pandas

#python-3.x #pandas #dataframe

#python-3.x #pandas #фрейм данных

Вопрос:

Я пытаюсь установить диапазоны значений NaN в df следующим образом:

     [Column_1]     [Column_2]
1       A             10
2       B             20
3       C             NaN
4       D             NaN
5       E             NaN
6       F             60
7       G             65
8       H             NaN
9       I             NaN
10      J             NaN
11      K             90
12      L             NaN
13      M             100
  

Итак, на данный момент я только что перечислил индекс значений NaN в этой строке:

 df['Column_2'].isnull()].index.tolist()
  

Но тогда я не знаю, как установить интервалы этих значений в терминах Column_1 , которые в данном случае будут:

  [C-E] [H-J] [L]
  

Спасибо за ваши идеи!

Ответ №1:

Отфильтруйте строки, в которых находятся значения Column_2 NaN , затем groupby эти строки при последовательном появлении NaN значений в Column_2 и соберите соответствующие значения Column_1 внутри понимания списка:

 m = df['Column_2'].isna()
r = [[*g['Column_1']] for _, g in df[m].groupby((~m).cumsum())]
  

 print(r)
[['C', 'D', 'E'], ['H', 'I', 'J'], ['L']]
  

Комментарии:

1. Спасибо! @Shubham_Sharma, я просто добавил несколько строк, чтобы получить ответ, который я хотел. Могу я попросить вас дать краткое объяснение структуры вашего кода? Я не знаком с некоторым синтаксисом, который вы сделали.

2. В частности: *g, для _, ~m, .cumsum()

3. (~m).cumsum используется для создания группера, который можно использовать для группировки фрейма данных по дискретным последовательным вхождениям NaN значений в столбце 2. [*g[column1]] используется для распаковки значений column1 в сгруппированном фрейме g , по сути, это эквивалентно использованию g[column1].tolist()