gpt4 book ai didi

python - 将数据框一分为二并使用代字号 ~ 作为变量

转载 作者:太空狗 更新时间:2023-10-30 02:24:32 25 4
gpt4 key购买 nike

我想在 Python 3 中用 Pandas 做 2 个类似的操作。一个有波浪线,另一个没有波浪线。

1 - df = df[~(df.teste.isin(["Place"]))] 
2 - df = df[(df.teste.isin(["Place"]))]

我试图将波浪号声明为变量,这样我就可以只写一行,然后决定是否要使用波浪号。但它不起作用:

tilde = ["~", ""]
df = df[tilde[0](df.teste.isin(["Place"]))]

是否可以做一些可以减少我的代码的事情?因为我正在写很多相同的行只是交换波浪号...

谢谢!

为什么我想要波浪号作为变量:

def server_latam(df):
df.rename(columns={'Computer:OSI':'OSI'}, inplace=True)
df = df[~(df.teste.isin(["Place"]))]

df1 = df.loc[df.model != 'Virtual Platform', 'model'].count()
print("LATAM")
print("Physical Servers: ",df1)
df2 = df.loc[df.model == 'Virtual Platform', 'model'].count()
print("Virtual Servers: ",df2)
df3 = df.groupby('platformName').size().reset_index(name='by OS: ')
print(df3)

def server_latam_without_tilde(df):
df.rename(columns={'Computer:OSI':'OSI'}, inplace=True)
df = df[(df.teste.isin(["Place"]))]

df1 = df.loc[df.model != 'Virtual Platform', 'model'].count()
print("LATAM")
print("Physical Servers: ",df1)
df2 = df.loc[df.model == 'Virtual Platform', 'model'].count()
print("Virtual Servers: ",df2)
df3 = df.groupby('platformName').size().reset_index(name='by OS: ')
print(df3)

波浪号出现在每个函数的第二行。

最佳答案

对于您的有限用例,您所请求的好处有限。

分组

然而,您真正的问题是您必须创建的变量数量。您可以通过 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 == 0True = = 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 解决方案。

关于python - 将数据框一分为二并使用代字号 ~ 作为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52947282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com