对于您有限的用例,您所要求的好处有限。
GroupBy
Your 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]
and dfs[1]
, since False == 0
and True == 1
. There is最后一个例子的好处是。现在您不再需要不必要地创建新变量。您的数据框是有组织的,因为它们存在于同一个字典中。
函数调度
您的精准要求can可以通过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
解决方案。