Получить ненулевые значения для каждого столбца в пандах - PullRequest
0 голосов
/ 28 августа 2018

У меня есть датафрейм панд как df:

accel access adviser afpif  afp   publish  afraid verizon
0.00  0.14    0.00   0.00   0.00   0.13    0.00   0.44
0.13  0.00    0.00   0.77   0.00   0.00    0.22   0.00
0.00  0.00    0.87   0.00   0.34   0.00    0.00   0.00
......................................................
.....................................................

У меня также есть список L, который состоит из имен столбцов как элементов

L=['accel','afp','publish']

Все, что я хочу извлечь ненулевые значения этих элементов списка на основе pandas dataframe.

Ожидаемый результат: -

dictionary={'accel':0.13,'afp':0.34,'publish':0.13}

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Используйте DataFrame.loc с пониманием речи и iat, если всегда существует хотя бы одно ненулевое значение:

d = {c: df.loc[df[c] ! =0, c].iat[0] for c in L }
print (d)
{'accel': 0.13, 'afp': 0.34, 'publish': 0.13}

Более общая работа только с 0 столбцами:

d = {c: next(iter(df.loc[df[c] != 0, c]), 'no value') for c in L }
print (d)
{'accel': 0.13, 'afp': 0.34, 'publish': 0.13}
0 голосов
/ 28 августа 2018

Ответ в одну строку будет:

df.sum().to_dict()
0 голосов
/ 28 августа 2018

Благодаря @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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...