我有这个数据框:
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乘以其他值?
预先感谢您的帮助。
答案 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])