gpt4 book ai didi

python - 在分组数据上添加计算列

转载 作者:太空宇宙 更新时间:2023-11-03 14:45:08 27 4
gpt4 key购买 nike

我使用 Pandas 并创建了 2 个数据透视表,然后使用以下代码将它们交错到 1 个数据帧中:

df_sales = pd.read_sql_query(sales_query, cnxn, params=[report_start, end_mtd, whse])                                
print('executing sales sql for warehouse : ' + whse)
df_sales['PERIOD'] = (((df_sales['INV_MONTH'].astype(str) + '/' + df_sales['INV_YEAR'].astype(str))))
df_sales = pd.pivot_table(df_sales, index=['REP', 'CUST_NO'], columns=['PERIOD'], values=['SALES'], fill_value=0)

df_profit = pd.read_sql_query(profit_query, cnxn, params=[report_start, end_mtd, whse])
print('executing profit sql for warehouse : ' + whse)
df_profit['PERIOD'] = (((df_profit['INV_MONTH'].astype(str) + '/' + df_profit['INV_YEAR'].astype(str))))
df_profit = pd.pivot_table(df_profit, index=['REP', 'CUST_NO'], columns=['PERIOD'], values=['PROFIT'], fill_value=0)

df = pd.concat([df_sales, df_profit], axis=1)[list(interleave([df_sales, df_profit]))]

我的输出如下所示:

SALES     PROFIT     SALES    PROFIT       
01/2017 01/2017 02/2017 02/2017
$96.01 $23.18 $7,347.66 $1,267.72
$600.00 $146.35 $600.00 $147.15

我想向该表添加计算的 df['MARGIN'] 列以给出以下输出:

SALES     PROFIT     MARGIN    SALES       PROFIT      MARGIN
01/2017 01/2017 02/2017 02/2017 02/2017 02/2017
$96.01 $23.18 24.14% $7,347.66 $1,267.72 17.25%
$600.00 $146.35 24.39% $600.00 $147.15 24.53%

我尝试使用 df['MARGIN'] = df['PROFIT']/df['SALES'] 但出现错误:

ValueError:传递的项目数量错误为 12,放置意味着 1

假设这是错误,因为我在报告中包含了 12 个句点。

最佳答案

只要对列索引进行排序,您就可以做您想做的事情。

假设:

df = pd.concat([df_sales, df_profit], axis=1)

为您提供一个具有两级列分层索引的数据框,您可以执行以下操作:

df = pd.concat([df_sales, df_profit], axis=1)
df["MARGIN"] = df["PROFIT"] / df["SALES"]

如果此操作失败,是因为列索引未排序。您只需执行以下操作即可修复它:

df = pd.concat([df_sales, df_profit], axis=1)
df.sort_index(axis=1, inplace=True)
df["MARGIN"] = df["PROFIT"] / df["SALES"]

然后您只需像以前一样交错列即可。

更新:

最终交错的丑陋解决方案:

n = len(df.columns) // 3
# Using sum for lists is highly discouraged! But convenient in this case :)
cols = sum(([j * n + i for j in range(3)] for i in range(n)), [])
df = df.iloc[:, cols]

关于python - 在分组数据上添加计算列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46284247/

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