pandas 如何在多级列数据框中添加计算列

mutmk8jj  于 2023-02-06  发布在  其他
关注(0)|答案(2)|浏览(164)

我有一个多层次的列 Dataframe 的行之一如下:

如何为每个“年”添加列“销售额”=“数量”*“价格”?
字典格式的输入 Dataframe :

{('Qty', 2001): [50, 50], ('Qty', 2002): [100, 10], ('Qty', 2003): [200, 20], ('Qty', 2004): [300, 30], ('Qty', 2005): [400, 40], ('Price', 2001): [20, 11], ('Price', 2002): [21, 12], ('Price', 2003): [22, 13], ('Price', 2004): [23, 14], ('Price', 2005): [24, 15]}

目前,我正在为每一年分别拆分 Dataframe ,并添加一个计算列。如果有更简单的方法,那就太好了。
以下是预期输出

mmvthczy

mmvthczy1#

您可以使用列表解析创建所需的列名,然后简单地分配乘法(df.mul)。

new_cols = [('Sales', col) for col in df['Qty'].columns]
# [('Sales', 2001), ('Sales', 2002), ('Sales', 2003), ('Sales', 2004), ('Sales', 2005)]

df[new_cols] = df['Qty'].mul(df['Price'])

df

   Qty                     Price                     Sales                    \
  2001 2002 2003 2004 2005  2001 2002 2003 2004 2005  2001  2002  2003  2004   
0   50  100  200  300  400    20   21   22   23   24  1000  2100  4400  6900   
1   50   10   20   30   40    11   12   13   14   15   550   120   260   420   

         
   2005  
0  9600  
1   600
4nkexdtk

4nkexdtk2#

让我们使用stack来展平多索引列,然后相乘,并使用解栈重新整形

df.stack().eval('Sales = Price * Qty').unstack()
Price                    Qty                       Sales                        
   2001 2002 2003 2004 2005 2001 2002 2003 2004 2005  2001  2002  2003  2004  2005
0    20   21   22   23   24   50  100  200  300  400  1000  2100  4400  6900  9600
1    11   12   13   14   15   50   10   20   30   40   550   120   260   420   600

相关问题