In [2]:
L = ['CPHL_INTEG', 'CPHL_INTEG_CALC', 'CPHL_BTL', 'SALT']

In [5]:
[L.index(p) for p in L if 'INTEG' in p]


Out[5]:
[0, 1]

In [42]:
import pandas as pd
import numpy as np
import timeit

In [6]:
df =pd.DataFrame.from_dict({'STATN': ['A','A','A','A','A','B','B','',''], 'VISS': ['a','a','a','a','a','b','b','a','a'], 'CHL_BTL': [1,2,3,4,5, np.nan, np.nan, np.nan, np.nan], 'CHL_INTEG': [np.nan, np.nan, np.nan, np.nan, np.nan, 2, 2.5, np.nan, np.nan], 'DEPH': [0,5,10,0,5,np.nan,np.nan,np.nan,np.nan], 'MXDEP': [np.nan, np.nan, np.nan, np.nan, np.nan, 10, 10, 10, 10], 'CHL_INTEG_CALC': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 5, 7]})

In [1]:
indicator_parameter = ['CHL_BTL', 'CHL_INTEG', 'CHL_INTEG_CALC']

In [8]:
df.dropna(subset = indicator_parameter, how = 'all')


Out[8]:
CHL_BTL CHL_INTEG CHL_INTEG_CALC DEPH MXDEP STATN VISS
0 1.0 NaN NaN 0.0 NaN A a
1 2.0 NaN NaN 5.0 NaN A a
2 3.0 NaN NaN 10.0 NaN A a
3 4.0 NaN NaN 0.0 NaN A a
4 5.0 NaN NaN 5.0 NaN A a
5 NaN 2.0 NaN NaN 10.0 B b
6 NaN 2.5 NaN NaN 10.0 B b
7 NaN NaN 5.0 NaN 10.0 a
8 NaN NaN 7.0 NaN 10.0 a

In [9]:
df.loc[df.VISS == 'a'].dropna(subset = indicator_parameter, how = 'all')


Out[9]:
CHL_BTL CHL_INTEG CHL_INTEG_CALC DEPH MXDEP STATN VISS
0 1.0 NaN NaN 0.0 NaN A a
1 2.0 NaN NaN 5.0 NaN A a
2 3.0 NaN NaN 10.0 NaN A a
3 4.0 NaN NaN 0.0 NaN A a
4 5.0 NaN NaN 5.0 NaN A a
7 NaN NaN 5.0 NaN 10.0 a
8 NaN NaN 7.0 NaN 10.0 a

In [10]:
wb_df = df.loc[df.VISS == 'a'].dropna(subset = indicator_parameter, how = 'all')[indicator_parameter]
col1 = wb_df.isnull().all()

In [11]:
col1


Out[11]:
CHL_BTL           False
CHL_INTEG          True
CHL_INTEG_CALC    False
dtype: bool

In [12]:
col1[np.where(~col1)[0]].index[:].tolist()


Out[12]:
['CHL_BTL', 'CHL_INTEG_CALC']

In [13]:
df[col1[np.where(~col1)[0]].index[:].tolist()]


Out[13]:
CHL_BTL CHL_INTEG_CALC
0 1.0 NaN
1 2.0 NaN
2 3.0 NaN
3 4.0 NaN
4 5.0 NaN
5 NaN NaN
6 NaN NaN
7 NaN 5.0
8 NaN 7.0

In [14]:
col1[np.where(col1)[0]].index[:].tolist()


Out[14]:
['CHL_INTEG']

In [15]:
df.dropna(subset = col1[np.where(~col1)[0]].index[:].tolist(), how = 'all')


Out[15]:
CHL_BTL CHL_INTEG CHL_INTEG_CALC DEPH MXDEP STATN VISS
0 1.0 NaN NaN 0.0 NaN A a
1 2.0 NaN NaN 5.0 NaN A a
2 3.0 NaN NaN 10.0 NaN A a
3 4.0 NaN NaN 0.0 NaN A a
4 5.0 NaN NaN 5.0 NaN A a
7 NaN NaN 5.0 NaN 10.0 a
8 NaN NaN 7.0 NaN 10.0 a

In [58]:
statn = df.STATN.tolist()
pos = df.VISS.tolist()

In [59]:
%%timeit
for i, x in enumerate(statn): 
    if x == "":
        statn[i] = pos[i]
df['STATN'] = statn


137 µs ± 1e+03 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

In [52]:
%%timeit
for i in df.index: 
    if df.loc[i, 'STATN'] == "":
        df.loc[i, 'STATN'] = df.loc[i, 'VISS']


2.03 ms ± 38.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [ ]:
df[STATN].apply(lambda x: float(x) if x else np.nan)

In [51]:
df.loc[i, 'STATN']


Out[51]:
'B'

In [38]:
statn


Out[38]:
['A', 'A', 'A', 'A', 'A', 'a', 'a']

In [28]:
i


---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-28-372e25f23b5a> in <module>()
----> 1 i

NameError: name 'i' is not defined

In [39]:
df.VISS.tolist()


Out[39]:
['a', 'a', 'a', 'a', 'a', 'b', 'b', 'a', 'a']

In [ ]: