извлечь слово и заполнить в определенном диапазоне, между двумя точками в пандах - PullRequest
1 голос
/ 25 сентября 2019

my df:

A,B
hello my world, adam
i like my turbo1, nan
with love,nan
good morning, john
enev one,nan
turbo2,nan
good to you,nan
man too,emily

Я хочу извлечь слова turbo1 и turbo2 в столбец B, а затем заполнить все nans этих слов, но только до тех пор, пока какое-либо слово не появится в столбце B в каждомпуть вверх и вниз

ожидаемый результат:

A,B
hello my world, adam
i like my turbo1, turbo1
with love,turbo1
good morning, john
enev one,turbo2
turbo2,turbo2
goon to you,turbo2
man too,emily

мой код:

df['B']=df['B'].str.extract(r'(turbo1|turbo2)').fillna(method='bfill').fillna(method='ffill')

У меня проблема в том, что я не могу заполнить nans только в этом диапазоне между уже существующимислова.

1 Ответ

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

При необходимости замените все пропущенные значения NaN s, используйте следующие группы:

m = df['B'].notna()
#for oldier pandas versions
#m = df['B'].notnull()
g = m.cumsum()[~m]
s = df['A'].str.extract(r'(turbo1|turbo2)', expand=False)

df.loc[~m, 'B'] = df['B'].fillna(s).groupby(g).apply(lambda x: x.ffill().bfill())
print (df)
                  A       B
0    hello my world    adam
1  i like my turbo1  turbo1
2         with love  turbo1
3      good morning    john
4          enev one  turbo2
5            turbo2  turbo2
6       good to you  turbo2
7           man too   emily

Подробности :

Сначала замените пропущенные значения извлеченными значениями B, затем создайте уникальные группы только для последовательных NaN с и замените пропущенные значения для групп с прямым и обратным заполнением:

print (df.assign(filled = df['B'].fillna(s),
                 cumsum = m.cumsum(),
                 g = m.cumsum()[~m]))

                  A      B  filled  cumsum    g
0    hello my world   adam    adam       1  NaN
1  i like my turbo1    NaN  turbo1       1  1.0
2         with love    NaN     NaN       1  1.0
3      good morning   john    john       2  NaN
4          enev one    NaN     NaN       2  2.0
5            turbo2    NaN  turbo2       2  2.0
6       good to you    NaN     NaN       2  2.0
7           man too  emily   emily       3  NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...