在特定行的数据框中更改增量值

时间:2019-08-15 20:40:51

标签: python pandas numpy dataframe

我有这个数据框:

   Power
    15
    15
    10
    30 
    15 
    90
    100
    22
    15

我想创建另一个名为“秒”的列,该列每行增加10,所以我编写了以下代码:

df.index += 1
df['Seconds'] = 10 * df.index.values

这将产生数据帧:

Seconds   Power
  10       15
  20       15
  30       10
  40       30
  50       15
  60       90
  70       100
  80       22
  90       15

我现在想使Seconds列增加10,直到第5行。在第5行,我想将增量更改为0.1,直到第7行。在第七行,我想将增量更改回10。

所以,我希望数据框看起来像这样:

Seconds   Power
  10       15
  20       15
  30       10
  40       30
  50       15
  50.1     90
  50.2     100
  60.2      22
  70.2      15

我将如何去做?当我到达需要更改增量的行时,是否应该更改索引并将index.values乘以其他值?

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您可以使用numpy.repeat + cumsum


np.repeat([10, 0.1, 10], [5, 2, 2]).cumsum()
#                         ^  ^  ^
#                        5th ^  ^
#                           7th ^
#                               Until end -> df.shape - increments[:-1].sum() more generally

array([10. , 20. , 30. , 40. , 50. , 50.1, 50.2, 60.2, 70.2])

从更一般的意义上讲,不必手动计算出重复序列可能更直观,并且根据其与先前值的差异而不是通过数组中的绝对位置来定义它们会更容易。

使用一些算法,我们可以创建一个为您完成所有繁琐工作的函数。

def cumsum_custom_increment(increments, points, n):
    points[1:] = np.diff(points)
    d = np.r_[points, n - np.sum(points)]
    return np.repeat(increments, d).cumsum()

>>> cumsum_custom_increment([10, 0.1, 10], [5, 7], df.shape[0])
array([10. , 20. , 30. , 40. , 50. , 50.1, 50.2, 60.2, 70.2])