Python: Как выбрать определенные столбцы путем нарезки для замены значений NaN после группового? - PullRequest
0 голосов
/ 09 марта 2019

Предполагая, что у нас есть df следующим образом

df = pd.DataFrame({ 'Col1' : [1, 1, 1, 2, 2, 2, 2],
                   'Col2' : [5, 6, 8, 3, 7, 8, 5],
                  'Col3' : [2, None, None, 3, None, None, 4],
                  'Col4' : [3, None,5, None, 8, None, 66],
                  'Col5': [None, 8, 6, None, 9, 6,None],
                  'Col6' : [3,5,2,5,2,7,9]})

Я хотел заменить значения None в столбцах Col3, Col4 и Col5, используя решение, предложенное jjs в этом посте здесь после применения groupby к первому столбец Col1.

То, что я сделал, это

df = df.groupby('Col1')['Col3','Col4','Col5'].ffill().bfill()

но для упоминания столбцов много работы.

Итак, я хотел знать, как я могу выбрать столбцы Col3, Col4 и Col5 путем нарезки?

Спасибо

Ответы [ 2 ]

2 голосов
/ 09 марта 2019

это решение заполняет все столбцы NaN так, как вы хотите:

df.groupby('Col1')[df.columns[df.isnull().any()]].ffill().bfill()
1 голос
/ 09 марта 2019

Tbh, я не уверен, что понимаю ваш вопрос.

Насколько я понимаю, вы можете просто сделать

df.groupby('Col1').ffill().bfill()

, потому что ffill() и bfill() простоне будет менять ваши столбцы без NaN s.

Теперь, если вы заранее знаете, какие столбцы вам нужно засыпать / заполнить и хотите уменьшить детализацию, вы можете просто сохранить их в переменной cols

cols = ['Col3','Col4','Col5']
df[cols] = df.groupby('Col1')[cols].ffill().bfill()
...