В вашем случае ограниченного использования то, что вы запрашиваете, имеет ограниченную выгоду.
GroupBy
Ваша проблема real , однако, это число переменных, которые выприходится создавать.Вы можете уменьшить их вдвое с помощью GroupBy
и рассчитанного группировщика:
df = pd.DataFrame({'teste': ['Place', 'Null', 'Something', 'Place'],
'value': [1, 2, 3, 4]})
dfs = dict(tuple(df.groupby(df['teste'] == 'Place')))
{False: teste value
1 Null 2
2 Something 3,
True: teste value
0 Place 1
3 Place 4}
Затем получить доступ к вашим фреймам данных с помощью dfs[0]
и dfs[1]
, начиная с False == 0
и True == 1
.В этом последнем примере является преимуществом.Теперь вы избавляетесь от необходимости создавать новые переменные без необходимости .Ваши кадры данных организованы, поскольку они существуют в одном словаре.
Функция диспетчеризации
Ваше точное требование может быть удовлетворено с помощью модуля operator
и функции идентификации:
from operator import invert
tilde = [invert, lambda x: x]
mask = df.teste == 'Place' # don't repeat mask calculations unnecessarily
df1 = df[tilde[0](mask)]
df2 = df[tilde[1](mask)]
Распаковка последовательности
Если вы хотите использовать одну строку, распакуйте последовательность:
df1, df2 = (df[func(mask)] for func in tilde)
Обратите внимание, что вы можете повторить результат GroupBy
с помощью:
dfs = dict(enumerate(df[func(mask)] for func in tilde)
Но это многословно и запутанно.Придерживайтесь решения GroupBy
.