数据帧中元素的成对计算

2024-09-27 21:29:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个结构类似于下面的数据帧(但在实际情况中,有更多的行和列)。在

In [2]: Ex   # The example DataFrame
Out[2]: 
       NameBef  v1B  v2B   v3B   v4B    NameAft  v1A  v2A   v3A   v4A
Id                                                                   
422   firstBef  133  145   534   745   FirstAft  212  543  2342  4563
862  secondBef  234  434   345  3453  SecondAft  643  493  3433   234
935   thirdBef  232  343  6454   463   thirdAft  423  753   754   743

对于每一行,我想计算上面每个vXB和vXA值的商(x是变量),最后得到一个像这样的数据帧

^{pr2}$

其中每个元素是原始数据帧的相应元素的商。在

我不知道怎么方便地做这个。在

为了方便起见,如果不要求只提供“before”和“after”值(即“v1B”、“v4B”和“v1A”、“v4A”)的第一列和最后一列的名称(即不是每列)。在

以下是我想到的。在

In [3]: C=Ex.columns
In [4]: C1B=C.get_loc('v1B')
In [5]: C2B=C.get_loc('v4B')
In [6]: C1A=C.get_loc('v1A')
In [7]: C2A=C.get_loc('v4A')
In [8]: FB=Ex.ix[:,C1B:C2B+1]
In [9]: FA=Ex.ix[:,C1A:C2A+1]

In [10]: FB           # The FB and FA frames have this structure
Out[10]: 
     v1B  v2B   v3B   v4B
Id                       
422  133  145   534   745
862  234  434   345  3453
935  232  343  6454   463

[3 rows x 4 columns]

最后生成所需的数据帧。这是通过对DataFrame.values生成的numpy数组进行计算来完成的。在

我从这个question/answer得到的方法:

In [12]: DataFrame((FA.values*1.0) / FB.values,columns=['v1Q','v2Q','v3Q','v4Q'],index=Ex.index)
Out[12]: 
          v1Q       v2Q       v3Q       v4Q
Id                                         
422  1.593985  3.744828  4.385768  6.124832
862  2.747863  1.135945  9.950725  0.067767
935  1.823276  2.195335  0.116827  1.604752

[3 rows x 4 columns]

我错过什么了吗?我希望通过对原始数据帧进行一些操作,可以以更直接的方式实现这一点。在

难道没有直接在数据帧上进行元素计算而不是通过numpy数组的操作吗?在


Tags: columns数据inid元素dataframegetfb
1条回答
网友
1楼 · 发布于 2024-09-27 21:29:21

您可以始终使用df.filter来选择相关的列名。它可以接受一个正则表达式,这样您就可以用如下方式指定after/before列:

>>> df.filter(regex=r'^v.A$').values / df.filter(regex=r'^v.B$').values
array([[ 1.59398496,  3.74482759,  4.38576779,  6.12483221],
       [ 2.74786325,  1.1359447 ,  9.95072464,  0.06776716],
       [ 1.82327586,  2.19533528,  0.11682677,  1.60475162]])

关于算术运算,你没有遗漏任何东西。这里有必要使用Numpy数组(.values),否则Pandas从两个数据帧中的公共索引标签计算值。如果索引丢失,则NaN中的计算结果。Numpy数组没有标记索引,因此元素操作成功。在

相关问题 更多 >

    热门问题