Mam df w następujący sposób:

   a    b
0  1  NaN
1  2  NaN
2  1  1.0
3  4  NaN
4  9  1.0
5  6  NaN
6  5  2.0
7  8  NaN
8  9  2.0

Chciałbym wypełnić nan tylko między liczbami, aby uzyskać df w ten sposób:

   a    b
0  1  NaN
1  2  NaN
2  1  1.0
3  4  1.0
4  9  1.0
5  6  NaN
6  5  2.0
7  8  2.0
8  9  2.0

A następnie utwórz dwie nowe ramki danych:

   a    b
2  1  1.0
3  4  1.0
4  9  1.0
   a    b
6  5  2.0
7  8  2.0
8  9  2.0

Co oznacza, że wybierz wszystkie kolumny i wiersze z wypełnionym tylko nan.

Mój pomysł na pierwszą część, to z wypełnieniem nan, polega na utworzeniu oddzielnej ramki danych z indeksami wierszy, takimi jak:

2 1.0
4 1.0
6 2.0
8 2.0

I na tej podstawie utwórz zakres indeksów wierszy do wypełnienia.

Moje pytanie jest może, związane z tą częścią, z zastąpieniem nan, bardziej pythonową funkcją do tego.

0
data_b77 11 styczeń 2020, 00:41

1 odpowiedź

Najlepsza odpowiedź

Co powiesz na

df[df.b.ffill()==df.b.bfill()].ffill()

Prowadzi do

#    a    b
# 2  1  1.0
# 3  4  1.0
# 4  9  1.0
# 6  5  2.0
# 7  8  2.0
# 8  9  2.0

Wyjaśnienie:

df['c'] = df.b.ffill()
df['d'] = df.b.bfill()

#    a    b    c    d
# 0  1  NaN  NaN  1.0
# 1  2  NaN  NaN  1.0
# 2  1  1.0  1.0  1.0
# 3  4  NaN  1.0  1.0
# 4  9  1.0  1.0  1.0
# 5  6  NaN  1.0  2.0
# 6  5  2.0  2.0  2.0
# 7  8  NaN  2.0  2.0
# 8  9  2.0  2.0  2.0
2
SpghttCd 10 styczeń 2020, 22:07