Как получить второе ненулевое значение на строку в pandas - PullRequest
1 голос
/ 20 февраля 2020

Как получить второе ненулевое значение на строку в pandas. Я знаю, что с помощью first_valid_index () мы можем получить первое ненулевое значение на строку, но как получить второе ненулевое значение. Любая помощь?

1 Ответ

3 голосов
/ 20 февраля 2020

Вы можете использовать df.notna() с cumsum и idxmax

Кроме того, для обработки случаев, когда могут быть * NaN значения для столбца не используют series.where с тем же решением, но условием, которое проверяет сумму нулевых значений

df.notna().cumsum().eq(2).idxmax().where(df.isna().sum().gt(1))

Пример:

data = {'id': [np.nan,1,1,np.nan,2,3],
    'value': ['a','a',np.nan,np.nan,'b','c'],
    'obj_id': [np.nan,2,3,3,3,np.nan],
    'test': [1,2,3,4,5,6]}
df = pd.DataFrame (data)

    id value  obj_id  test
0  NaN     a     NaN     1
1  1.0     a     2.0     2
2  1.0   NaN     3.0     3
3  NaN   NaN     3.0     4
4  2.0     b     3.0     5
5  3.0     c     NaN     6

Для проверки уровня столбца:

df.notna().cumsum().eq(2).idxmax().where(df.notna().sum().gt(1))

id        2
value     1
obj_id    2
test      1
dtype: float64

Для уровня строки вы можете использовать те же логы c, но с осью = 1:

df.notna().cumsum(1).eq(2).idxmax(1).where(df.notna().sum(1).gt(1))
0      test
1     value
2    obj_id
3      test
4     value
5     value
dtype: object
...