Как заполнить события значением на основе индекса значения по отношению к событию [pandas] - PullRequest
0 голосов
/ 03 мая 2020

Извините, если заголовок не ясен, эту проблему у меня немного сложно подвести итог.

У меня есть один столбец, который содержит значение события на его пике. Непиковые значения - это только нан.

[np.nan, 30, np.nan, np.nan, 10, np.nan, np.nan, 20, np.nan]

Во втором столбце определяется, находимся ли мы в событии A или B

['A', 'A', 'A', 'A', 'B', 'B', 'A', 'A', 'A']

На основе индекса значения по отношению к тому, что событие, под которым он подпадает, я хочу «заполнить» события соответствующими значениями.

[30, 30, 30, 30, 10, 10, 20, 20, 20]

Так как индекс первого значения 30 попадает под этот конкретный раздел события A, мы заполняем это событие с помощью 30 и т. Д.

Пример приведен здесь:

df = pd.DataFrame({'val': [np.nan, 30, np.nan, np.nan, 10, np.nan, np.nan, 20, np.nan],
                   'event': ['A', 'A', 'A', 'A', 'B', 'B', 'A', 'A', 'A']})

    val event
1   NaN     A
2  30.0     A
3   NaN     A
4   NaN     A
5  10.0     B
6   NaN     B
7   NaN     A
8  20.0     A
9   NaN     A

Я хочу, чтобы мой выходной столбец был [30, 30, 30, 30, 10, 10, 20, 20, 20]

1 Ответ

1 голос
/ 04 мая 2020

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

df['output'] = df.groupby(df['event'].shift().ne(df['event']).cumsum())['val']\
                 .apply(lambda x: x.fillna(x.max()))

print(df)
    val event  output
0   NaN     A    30.0
1  30.0     A    30.0
2   NaN     A    30.0
3   NaN     A    30.0
4  10.0     B    10.0
5   NaN     B    10.0
6   NaN     A    20.0
7  20.0     A    20.0
8   NaN     A    20.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...