Альтернативы неудобному Pandas/Индексация Dataframe Python: df_REPEATED [df_REPEATED ['var']]> 0?

В Pandas/Python, я должен написать имя dataframe дважды при настройке на свою собственную переменную:

df_REPEATED[df_REPEATED['var']>0]

Это случается так много раз, что кажется необоснованным. 90-99% пользователей будут счастливы 95% времени с чем-то вроде:

df_REPEATED[['var']>0]

Этот синтаксис также необходим с помощью .loc[]. Есть ли альтернатива или ярлык для написания этого?

С другой стороны, есть ли какой-то прецедент, который я не понимаю, и на самом деле мое образование на python было крайне неудовлетворительным?

Ответ 1

Не официальный ответ... но это уже упростило мою жизнь в последнее время:

https://github.com/toobaz/generic_utils/blob/master/generic_utils/pandas/condition.py

Вам не нужно загружать все репо: сохранение файла и выполнение

from condition import Condition as C

должно быть достаточно. Затем вы используете его следующим образом:

df = pd.DataFrame([[1, 2, True],
                   [3, 4, False], 
                   [5, 7, True]],
                  index=range(3), columns=['a', 'b', 'c'])
# On specific column:
print(df.loc[C('a') > 2])
print(df.loc[-C('a') == C('b')])
print(df.loc[~C('c')])
# On entire DataFrame:
print(df.loc[C().sum(axis=1) > 3])
print(df.loc[C(['a', 'b']).diff(axis=1)['b'] > 1])

Немного менее глупый пример использования:

data = pd.read_csv('ugly_db.csv').loc[~(C() == '$null$').any(axis=1)]

Ответ 2

df_REPEATED['var'] > 0 является булевым массивом. Помимо его длины, он не имеет никакого отношения к DataFrame. Это могло быть результатом другого выражения, например another_df['another_var'] > some_other_value, если длины совпадают. Таким образом, он предлагает гибкость. Если бы синтаксис был похож на тот, который вы предложили, мы не смогли бы этого сделать. Однако есть альтернативы тому, что вы просите. Например,

df_REPEATED.query('var > 0')

query может быть очень быстрым, если DataFrame большой и он менее подробный, но ему не хватает преимуществ булевого индексирования, и вы начинаете испытывать проблемы, если выражение усложняется.