使用 Python 进行方差分析 [已关闭]

Variance Analysis with Python [closed]

提问人:Evan 提问时间:11/18/2023 最后编辑:Evan 更新时间:11/18/2023 访问量:25

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

6天前关闭。

我需要将方差驱动因素解释为 abs 阈值,在我的情况下是 50,000。我的想法是使用 abs 值 % 的整体和方差标志。在提供的 DateFrame 中,我将从 var -1,300,000 的“Basic LLC”开始,因为它的“abs_comp”是最大的。由于它大于 50k,我需要找到下一个最大的abs_comp并且“var_sign” = 1 作为偏移量。在我的例子中,它将是“大公司”,所以 -1,300,000 + 950,000 = -350,000。这仍然高于 abs thresh 并且是一个负值,所以我需要找到下一个最大的“abs_comp”值,该值具有“var_sign”= 1。这是“通用公司”,所以 1,300,000 + 950,000 + 320,000 = 30,000。这低于我的腹肌,我想返回一个 df,它是用于计算到阈值的行。

我认为这是迭代器实现的一个很好的例子。我只是不知道在哪里添加标牌的反转并跟踪已计算的内容。

import pandas as pd
data = {
    'Vendor': ['Generic Co', 'Basic LLC', 'Big Corp', "Small Co", "Mid Mkt", "Name"],
    'Actuals': [100000, 1300000, 50000, 1500000, 97000, 45000],
    'Budget': [420000, 0, 1000000, 1000000, 97000, 50000]
}

df = pd.DataFrame(data)
df['var'] = df['Budget'] - df['Actuals']
df['var_abs'] = abs(df['var'])
df['abs_comp'] = (df['var_abs']/ df['var_abs'].sum())*100

df = df.sort_values('abs_comp', ascending = False).reset_index(drop=True)
df['var_sign'] = pd.np.sign(df['var'])

total_var = 0
result_rows = []
for index, row in df.iterrows():
    total_var += row['var'] * row['var_sign'] #how do I .loc and ensure signage here
    result_rows.append(row)
    
    if abs(total_var) >= threshold:
        break

result_df = pd.DataFrame(result_rows)
Python Pandas 方差

评论

1赞 Karl Knechtel 11/18/2023
“这是一个可靠的方法吗?”在这里不是一个可以回答的问题。有一个单独的代码审查网站,但他们对可能不匹配的问题有非常具体的标准。请阅读如何提问;我们需要对《守则》的一个特定方面提出具体、客观的问题。
1赞 Karl Knechtel 11/18/2023
(简单地删除该文本并不能解决问题;仍然需要有一个实际的问题 - 这不是一个讨论论坛。请尝试代码,看看是否得到可接受的结果。如果您已经确定了具体错误的内容,请调试问题,尝试创建一个最小的可重现示例,并查找有关同一问题的现有问题。如果你发现有一件你不知道该怎么做的具体事情,请清楚准确地解释。
0赞 Karl Knechtel 11/18/2023
(我还为您修复了一些格式错别字。特别是,这里的段落之间需要一个空行,例如在 Reddit 上。
0赞 Evan 11/18/2023
@KarlKnechtel,我很抱歉,“这是一个可靠的方法吗?”指的是使用迭代器来解决这个问题。
1赞 Karl Knechtel 11/18/2023
啊。那么,也许您会对如何在 Pandas 中遍历 DataFrame 中的行感兴趣。

答: 暂无答案