繁体   English   中英

对部分已知的列名称执行算术运算

[英]Performing arithmetic on partially known columns names

我想对列执行一些算术计算,其中我只知道第一个字符(数字),这对于某些列是常见的。 作为输出,我需要创建另一个data frame ,其名称包含相同的字符(数字)。

例如。 我有一个包含5列的df1 ,其中一些以数字1开头,另一些以2开头,依此类推。 我需要将(乘法或任何其他函数)全部加上1,2并使用列var1var2创建df2 (数字对应于df1

MWE:

import pandas as pd
import numpy as np

index=pd.date_range('2014-1-1 00:00:00', '2014-12-31 23:50:00', freq='1h')
df1=pd.DataFrame(np.random.randn(len(index),5).cumsum(axis=0),columns=['1A','1B','C','2D','2E'],index=index)

我的想法是创建一个空的df2并循环通过df applaying df.filter(regex=(i))函数,但我不知道如何基于i数创建新的列名。

df2=[]

for i in df1:
    df_fil=[]
    df_fil=df.filter(regex=(i))
    df2['var'+i]=df_fil.sum()

我会很感激任何建议。

编辑

所需的输出:

                var1     var2      var3   
2014-01-01  1A+1B+1D  2A+2B+2D  3A+3B+3D  
2014-01-02  ....and so on.....

where the math function is performed for every row.

我将稍微改变一下MWE,部分原因是为了简洁起见,部分是为了每个数字有不同的列数:

index=pd.date_range('2014-1-1', '2014-1-10', freq='1D')
df1=pd.DataFrame(np.random.randn(len(index),6).cumsum(axis=0),
                 columns=['1A','1B','2C','2D','2E','3F'],index=index)

                  1A        1B        2C        2D        2E        3F
2014-01-01  1.614124  0.794855 -0.417129  0.219520 -1.488025  0.174294
2014-01-02  1.802256  0.004414 -2.286057  0.432783 -0.104455  1.194493
2014-01-03  2.603609  0.182026 -2.763507 -0.358307 -0.453031  2.188724
2014-01-04  2.661041 -0.911023 -3.193927 -0.541110  0.064825  2.263758
2014-01-05  2.784960 -2.114531 -3.206907  0.142064 -0.554215  1.726185
2014-01-06  1.162722 -1.841800 -2.940212 -0.909338 -1.327187  0.655045
2014-01-07  3.904791 -0.583724 -2.696215  0.560302 -2.839679  1.714807
2014-01-08  5.010886  0.528935 -2.815885  1.134565 -4.262055 -0.019529
2014-01-09  4.541217 -1.105712 -3.432948  1.110232 -5.955953 -0.859368
2014-01-10  4.031846  0.021889 -3.953261  0.958110 -6.615558 -1.304860

df2=pd.DataFrame( index=df1.index )

for i in list('123'):
    df_fil=df1.filter(regex=i)
    df2['var'+i] = df_fil.sum(axis=1)

                var1      var2      var3
2014-01-01  2.408979 -1.685633  0.174294
2014-01-02  1.806670 -1.957730  1.194493
2014-01-03  2.785634 -3.574845  2.188724
2014-01-04  1.750019 -3.670212  2.263758
2014-01-05  0.670429 -3.619058  1.726185
2014-01-06 -0.679078 -5.176737  0.655045
2014-01-07  3.321067 -4.975593  1.714807
2014-01-08  5.539821 -5.943374 -0.019529
2014-01-09  3.435505 -8.278669 -0.859368
2014-01-10  4.053735 -9.610709 -1.304860

这是一个有点不同的解决方案。

df2 = [np.sum(df1[[h for h in df1.columns.values
                     if h.startswith(c)]], axis=1) for c in '123']

result = pd.DataFrame(df2, index=["var%s" % c for c in '123']).transpose()

对我来说似乎有点麻烦:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM