Благодаря @jpp, не используем цепную индексацию и вместо нее используем .loc
-
op = { col: df.loc[df[col].ne(0), col].tolist() for col in L }
Выход -
{'accel': [0.13], 'afp': [0.34], 'publish': [0.13]}
Эта реализация будет более надежной в том смысле, что она может получать несколько ненулевых значений. Однако, если вы уверены, что хотите просто одно значение, вы можете отфильтровать его внутри самого понимания dict
-
op = { col: df.loc[df[col].ne(0), col].iat[0] for col in L }
OR
op = { col: df.loc[df[col].ne(0), col].values[0] for col in L }
Выход -
{'accel': 0.13, 'afp': 0.34, 'publish': 0.13}
Примечание. Если вы уверены, что ненулевые значения являются положительными, вы можете использовать >0
или Series.gt()
API