熊猫数据框按列计算

RSM

我有以下数据框列:

Index(['Location' 'Dec-2021_x', 'Jan-2022_x', 'Feb-2022_x', 'Mar-2022_x',
       'Apr-2022_x', 'May-2022_x', 'Jun-2022_x', 'Jul-2022_x', 'Aug-2022_x',
       'Sep-2022_x', 'Oct-2022_x', 'Nov-2022_x', 'Dec-2022_x', 'Jan-2023_x',
       'Feb-2023_x', 'Mar-2023_x', 'Apr-2023_x', 'May-2023_x', 'Jun-2023_x',
       'Jul-2023_x', 'Aug-2023_x', 'Sep-2023_x', 'Oct-2023_x', 'Nov-2023_x',
       'Dec-2023_x', 'Jan-2024_x', 'Feb-2024_x', 'Mar-2024_x', 'Apr-2024_x',
       'May-2024_x', 'Jun-2024_x', 'Jul-2024_x', 'Aug-2024_x', 'Sep-2024_x',
       'Oct-2024_x', 'Nov-2024_x', 'Dec-2024_x', 
       'sum_val',
       'Dec-2021_y', 'Jan-2022_y', 'Feb-2022_y',
       'Mar-2022_y', 'Apr-2022_y', 'May-2022_y', 'Jun-2022_y', 'Jul-2022_y',
       'Aug-2022_y', 'Sep-2022_y', 'Oct-2022_y', 'Nov-2022_y', 'Dec-2022_y',
       'Jan-2023_y', 'Feb-2023_y', 'Mar-2023_y', 'Apr-2023_y', 'May-2023_y',
       'Jun-2023_y', 'Jul-2023_y', 'Aug-2023_y', 'Sep-2023_y', 'Oct-2023_y',
       'Nov-2023_y', 'Dec-2023_y', 'Jan-2024_y', 'Feb-2024_y', 'Mar-2024_y',
       'Apr-2024_y', 'May-2024_y', 'Jun-2024_y', 'Jul-2024_y', 'Aug-2024_y',
       'Sep-2024_y', 'Oct-2024_y', 'Nov-2024_y', 'Dec-2024_y'],
      dtype='object')

列减少的示例数据框如下所示:

df:
Location    Dec-2021_x  Jan-2022_x  sum_val Dec-2021_y  Jan-2022_y
A           212         315         1000    12          13      
B           312         612         1100    13          17      
C           242         712         1010    15          15      
D           215         382         1001    16          17      
E           252         319         1110    17          18      

我必须创建一个结果数据框,格式如下:

Index(['Location' 'Dec-2021', 'Jan-2022', 'Feb-2022', 'Mar-2022',
       'Apr-2022', 'May-2022', 'Jun-2022', 'Jul-2022', 'Aug-2022',
       'Sep-2022', 'Oct-2022', 'Nov-2022', 'Dec-2022', 'Jan-2023',
       'Feb-2023', 'Mar-2023', 'Apr-2023', 'May-2023', 'Jun-2023',
       'Jul-2023', 'Aug-2023', 'Sep-2023', 'Oct-2023', 'Nov-2023',
       'Dec-2023', 'Jan-2024', 'Feb-2024', 'Mar-2024', 'Apr-2024',
       'May-2024', 'Jun-2024', 'Jul-2024', 'Aug-2024', 'Sep-2024',
       'Oct-2024', 'Nov-2024', 'Dec-2024'
      dtype='object')

我们这样做的方法是使用以下公式:

'Dec-2021' = 'Dec-2021_x' * sum_val * 'Dec-2021_y' (these are all numeric columns)

以及所有月份的类似方式。准确地说是36个月。有没有办法以循环方式为月-年组合中的每一列执行此操作?这里大约有 65000+ 行,所以不想让系统不堪重负。

耶兹瑞尔

采用:

#sample data
np.random.seed(2022)
c = ['Location', 'Dec-2021_x', 'Jan-2022_x', 'Feb-2022_x', 'Mar-2022_x',
       'Apr-2022_x','sum_val', 'Dec-2021_y', 'Jan-2022_y', 'Feb-2022_y',
       'Mar-2022_y', 'Apr-2022_y']
df = (pd.DataFrame(np.random.randint(10, size=(5, len(c))), columns=c)
        .assign(Location=list('abcde')))
print (df)
          Location  Dec-2021_x  Jan-2022_x  Feb-2022_x  Mar-2022_x  Apr-2022_x  \
0        a           1           1           0           7           8   
1        b           8           0           3           6           8   
2        c           1           7           5           5           4   
3        d           0           7           5           5           8   
4        e           8           0           3           9           5   

   sum_val  Dec-2021_y  Jan-2022_y  Feb-2022_y  Mar-2022_y  Apr-2022_y  
0        2           8           0           5           9           1  
1        0           1           2           0           5           7  
2        8           2           3           1           0           4  
3        2           4           0           9           4           9  
4        2           1           7           2           1           7 

#remove unnecessary columns
df1 = df.drop(['sum_val'], axis=1)
#add columns names for not necessary remove - if need in ouput
df1 = df1.set_index('Location')
#split columns names by last _
df1.columns = df1.columns.str.rsplit('_', n=1, expand=True)

#seelct x and y Dataframes by second level and multiple
df2 = (df1.xs('x', axis=1, level=1).mul(df['sum_val'].to_numpy(), axis= 0) * 
       df1.xs('y', axis=1, level=1))
print (df2)
          Dec-2021  Jan-2022  Feb-2022  Mar-2022  Apr-2022
Location                                                  
a               16         0         0       126        16
b                0         0         0         0         0
c               16       168        40         0       128
d                0         0        90        40       144
e               16         0        12        18        70

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章