Как скопировать значения ниже существующего значения до следующего непустого значения? - PullRequest
0 голосов
/ 21 сентября 2019

Я попытался немного поискать, но это сложно описать словами, поэтому найти его было нелегко (и на правильном языке).

Дано:

  A B C
1 1
2
3
4 2
5
6 3
7
8
9
0

Требуется результат:

  A B C D
1 1     1
2       1
3       1
4 2     2
5       2
6 3     3
7       3
8       3
9       3
0       3

Ответы [ 2 ]

2 голосов
/ 21 сентября 2019

Ваш DataFrame не имеет NaN в "пустых" ячейках, поэтому я предполагаю, что:

  • dtype каждого столбца является объектом (фактически строка ),
  • «пустые» ячейки содержат либо пустую строку , либо пробел .

В этом случае одно из возможных решений:

  • заменить пустые строки / пробелы на NaN ,
  • call ffill .

Что-то вроде:

df['D'] = df.A.replace(r'^\s*$', np.nan, regex=True).ffill()

Редактировать

Если значения для "копирования" могут быть в любом столбце (нетолько в A ), тогда решение будет таким:

df['D'] = df.replace(r'^\s*$', np.nan, regex=True).ffill(axis=1)\
    .iloc[:, -1].ffill()

Аналогично предложенному Anky в его комментарии.

1 голос
/ 21 сентября 2019

Полный ответ на основе комментария @Mohit Motwani:

import pandas as pd

df = pd.DataFrame([[1, None, None], [None]*3,[None]*3,
                   [2,None,None], [None]*3,
                   [3,None,None], [None]*3, [None]*3, [None]*3,], 
                  columns=["A","B","C"] )

print(df)

df["D"] = df["A"].ffill()

print(df)

Вывод до:

     A     B     C
0  1.0  None  None
1  NaN  None  None
2  NaN  None  None
3  2.0  None  None
4  NaN  None  None
5  3.0  None  None
6  NaN  None  None
7  NaN  None  None
8  NaN  None  None

Вывод после:

     A     B     C    D
0  1.0  None  None  1.0
1  NaN  None  None  1.0
2  NaN  None  None  1.0
3  2.0  None  None  2.0
4  NaN  None  None  2.0
5  3.0  None  None  3.0
6  NaN  None  None  3.0
7  NaN  None  None  3.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...