使用pandas datafram的多列生成numpy数组

2024-09-29 19:35:17 发布

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

抱歉给你发了这么长的信。 我在Windows10上使用Python3.6,我有一个熊猫数据框,包含大约100000行。从这个数据帧我需要生成四个numpy数组。我的数据帧的前5行如下所示

A          B      x      UB1     LB1     UB2    LB2
0.2134  0.7866  0.2237  0.1567  0.0133  1.0499  0.127
0.24735 0.75265 0.0881  0.5905  0.422   1.4715  0.5185
0.0125  0.9875  0.1501  1.3721  0.5007  2.0866  2.0617
0.8365  0.1635  0.0948  1.9463  1.0854  2.4655  1.9644
0.1234  0.8766  0.0415  2.7903  2.2602  3.5192  3.2828

B列是(1列A),实际上B列不在我的数据框中。我加了它来解释我的问题 从这个数据帧,我需要生成三个数组。我的阵列看起来像

^{pr2}$

其中第一个元素是添加了负号的A列的第一行,类似地,第二个元素取自B列的第一行,第三个元素来自A列的第二行,第四个元素是B列的第二行,依此类推 我的第二个数组UB看起来像

array([ 0.2237, 0.0881, 0.1501, 0.0948, 0.0415, 0.2237],dtype=float32)

其中元素是X列的行

我的第三个数组bounds看起来像

   array([[0.0133 , 0.1567],
       [0.127 , 1.0499],
       [0.422 , 0.5905],
       [0.5185 , 1.4715],
       [0.5007 , 1.3721],
       [2.0617 , 2.0866],
       [1.0854 , 1.9463],
       [1.9644 , 2.4655],
       [2.2602 , 2.7903],
       [3.2828 , 3.5192]])

其中bounds[0][0]是LB1的第一行,bounds[0][1]是UB1的第一行。bounds[1][0]是LB2的第一行,bounds[1][1]是UB2的第一行。边界[2][0]也是LB1的第二行,依此类推。 我的第四个数组看起来像

array([[-1,  1,  0,  0,  0,  0,  0,  0,  0,  0],
       [ 0,  0, -1,  1,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  0,  0, -1,  1,  0,  0,  0,  0],
       [ 0,  0,  0,  0,  0,  0, -1,  1,  0,  0],
       [ 0,  0,  0,  0,  0,  0,  0,  0, -1,  1]])

它包含的行数与“数据框行数”和“列数=2*数据框行数”相同。在

你能告诉我对于100000行记录,什么是生成这些数组的有效方法吗


Tags: 数据numpy元素数组arrayboundsubpr2
1条回答
网友
1楼 · 发布于 2024-09-29 19:35:17

这应该相当简单:

from io import StringIO
import pandas as pd
import numpy as np

data = """A          B      x      UB1     LB1     UB2    LB2
0.2134  0.7866  0.2237  0.1567  0.0133  1.0499  0.127
0.24735 0.75265 0.0881  0.5905  0.422   1.4715  0.5185
0.0125  0.9875  0.1501  1.3721  0.5007  2.0866  2.0617
0.8365  0.1635  0.0948  1.9463  1.0854  2.4655  1.9644
0.1234  0.8766  0.0415  2.7903  2.2602  3.5192  3.2828"""

df = pd.read_csv(StringIO(data), sep='\\s+', header=0)

c = -np.stack([df['A'], 1 - df['A']], axis=1).ravel()
print(c)
# [-0.2134  -0.7866  -0.24735 -0.75265 -0.0125  -0.9875  -0.8365  -0.1635
#  -0.1234  -0.8766 ]

ub = df['x'].values
print(ub)
# [0.2237 0.0881 0.1501 0.0948 0.0415]

bounds = np.stack([df['LB1'], df['UB1'], df['LB2'], df['UB2']], axis=1).reshape((-1, 2))
print(bounds)
# [[0.0133 0.1567]
#  [0.127  1.0499]
#  [0.422  0.5905]
#  [0.5185 1.4715]
#  [0.5007 1.3721]
#  [2.0617 2.0866]
#  [1.0854 1.9463]
#  [1.9644 2.4655]
#  [2.2602 2.7903]
#  [3.2828 3.5192]]

n = len(df)
fourth = np.zeros((n, 2 * n))
idx = np.arange(n)
fourth[idx, 2 * idx] = -1
fourth[idx, 2 * idx + 1] = 1
print(fourth)
# [[-1.  1.  0.  0.  0.  0.  0.  0.  0.  0.]
#  [ 0.  0. -1.  1.  0.  0.  0.  0.  0.  0.]
#  [ 0.  0.  0.  0. -1.  1.  0.  0.  0.  0.]
#  [ 0.  0.  0.  0.  0.  0. -1.  1.  0.  0.]
#  [ 0.  0.  0.  0.  0.  0.  0.  0. -1.  1.]]

相关问题 更多 >

    热门问题