Панды дропна в определенных рядах - PullRequest
0 голосов
/ 01 октября 2019
import pandas as pd
df = pd.DataFrame({'ticker':['x','x','y','z','z'],
                   'bid':[1,2,np.nan,2,np.nan]})

Использование панд .dropna() В любом случае можно ли удалить строки из указанного диапазона индекса или подмножества данных? Например, в приведенном выше DataFrame, если я хочу удалить только те строки в индексе, где тикер равен 'z'. Надеюсь, это вернется:

ticker bid
x       1
x       2
y       np.nan
z       2

Ответы [ 3 ]

0 голосов
/ 01 октября 2019
df.loc[df.ticker == "z"] = df.loc[df.ticker == "z"].dropna()
df.dropna(subset=["ticker"])

Не уверен, что это лучше, когда у меня есть больше столбцов, и мне нужно указать, есть ли у них 2 пропущенных нана (используя .dropna(thresh=2) в первой капле)

0 голосов
/ 01 октября 2019

Вы можете использовать dropna с mask и fillna :

df.mask(df.eq('z')).dropna(how='all').fillna({'ticker':'z'})

Выход:

 ticker  bid
0      x  1.0
1      x  2.0
2      y  NaN
3      z  2.0

или

df.mask(df.eq('z')).dropna(how='all').mask(df.eq('z'),'z')
0 голосов
/ 01 октября 2019

Один из вариантов - просто проверить два условия по отдельности:

In [13]: df[(df['bid'].notnull()) | (df['ticker'] != 'z')]
Out[13]:

  ticker  bid
0      x  1.0
1      x  2.0
2      y  NaN
3      z  2.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...