【问题标题】:Python: Assign array values between rangesPython:在范围之间分配数组值
【发布时间】:2019-04-02 21:14:14
【问题描述】:

我有一个数据框:

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]

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

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

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

提前谢谢你!

【问题讨论】:

  • assign 1 to each valueassign 2 to each value 是什么意思?
  • 1 和 2 是数组“B”中的第一个非 0 元素,否则示例没有意义
  • 我已经改变了例子
  • 使用AB序列作为列制作一个DataFrame,然后你可以使用this technique

标签: python pandas python-2.7


【解决方案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)

【讨论】:

    【解决方案2】:

    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 数组中为该范围内的数据帧分配值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-26
      相关资源
      最近更新 更多