Python:在范围之间分配数组值

时间:2019-04-02 12:57:27

标签: python pandas python-2.7

我有一个数据框:

index     value
    0        0
    1        0
    2        0
    3        0
    4        0
    5        0
    6        0
    7        0
    8        0
    9        0
    10       0
    11       0
    12       0
    13       0
    14       0
    15       0
    16       0
    17       0
    18       0
    19       0
    20       0
    21       0
    22       0
    23       0
    24       0
    25       0
    26       0
    27       0
    28       0
    29       0
            ..
    57571    0
    57572    0
    57573    0
    57574    0
    57575    0
    57576    0
    57577    0
    57578    0
    57579    0
    57580    0
    57581    0
    57582    0
    57583    0
    57584    0
    57585    0
    57586    0
    57587    0
    57588    0
    57589    0
    57590    0
    57591    0
    57592    0
    57593    0
    57594    0
    57595    0
    57596    0
    57597    0
    57598    0
    57599    0
    57600    0

和2个数组:

A=np.arange(0,57601,1800) 
A= [    0,  1800,  3600,  5400,  7200,  9000, 10800, 12600, 14400,
       16200, 18000, 19800, 21600, 23400, 25200, 27000, 28800, 30600,
       32400, 34200, 36000, 37800, 39600, 41400, 43200, 45000, 46800,
       48600, 50400, 52200, 54000, 55800, 57600]

B=[555, 666, 0.0, 0.0, 0.0, 0.0, 1, 2, 3,4,5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0.0, 0]

我想根据“ A”中指示的间隔之间的索引,将“ B”中的值分配给“值”列中的元素。 例如:

  • 在0到1800之间为每个值分配555;

  • 在1801、3600之间为每个值分配666,依此类推。

提前谢谢!

2 个答案:

答案 0 :(得分:1)

首先,假设A和B的大小相同,我们可以制作一个这样的表:

lookup = pd.DataFrame({'index_col':A, 'B':B})

让我假设我们可以使目标数据帧如下:

df = pd.DataFrame({'index_col':np.arange(57601)})

现在,如果我们将两者合并,您将获得B列,其中包含许多不匹配的NaN:

merged_df = df.merge(lookup, how="left", on="index_col")

然后,我们可以用“ pad”填充所有NaN:

merged_df = merged_df.fillna(method="pad", axis=0)

答案 1 :(得分:0)

X = np.zeros(57601) df = pd.DataFrame(X,columns = ['value'])#将创建您的数据框

for i in range(len(A)-1): df['value'][A[i]:A[i+1]+1] = float(B[i])#遍历A数组中的每个范围,并为B数组中该范围内的数据帧分配值。