Как заполнить пропущенные значения в пандах, используя сдвиг через заданные интервалы? - PullRequest
2 голосов
/ 06 октября 2019

У меня есть кадр данных, который выглядит примерно так:

+---------+---------+
| Value A | Value B |
+---------+---------+
| 10       |       1 |
| 20       |       2 |
| 30       |       3 |
| 40       |       4 |
| 50       |       5 |
| 60       |     NaN |
| 70       |     NaN |
| 80       |     NaN |
| 90       |     NaN |
| 100      |     NaN |
+---------+---------+

, и я хочу заполнить эти пропущенные значения предыдущими значениями, но сместить, как показано ниже.


+---------+---------+
| Value A | Value B |
+---------+---------+
| 10       |       1 |
| 20       |       1 |
| 30       |       2 |
| 40       |       2 |
| 50       |       3 |
| 60       |       3 |
| 70       |       4 |
| 80       |       4 |
| 90       |       5 |
| 100      |       5 |
+---------+---------+

Проблема в том, что эти пропущенные значения могут быть в любом столбце. Я пытался сделать это вручную, но это заняло бы много времени. Кроме того, значения заполнения зависят от len() столбца A. Мой подход был примерно таким:

missing_data_len = len(valueA)-len(valueB)
df['ValueB'].shift(missing_data_len)

, а затем используйте ffill для заполнения значений NaN. но результаты не точны. Есть ли лучший подход для решения этой проблемы.

1 Ответ

1 голос
/ 06 октября 2019

Использование:

null=df['Value_B'].isnull()
r=(len(df)/null.sum())
df['Value_B']=df.loc[~null,'Value_B'].repeat(r).reset_index(drop=True)

   Value_A  Value_B
0       10      1.0
1       20      1.0
2       30      2.0
3       40      2.0
4       50      3.0
5       60      3.0
6       70      4.0
7       80      4.0
8       90      5.0
9      100      5.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...