我的初始資料框如下所示:
import pandas as pd
df = pd.DataFrame({
"id":[1,1,1,1,2,2],
"time": [1,2,3,4,5,6],
"x": [1,2,3,4,9,11 ],
"y": [5,6,7,8,3,2],
})
所以我有兩個 ID(1 和 2)或兩個不同的時間序列。現在我想為每個 ID 為 x 和 y 值添加一些隨機噪聲,并將其保存為初始 df 中的新 ID(具有相同長度):
# Noise
import numpy as np
noise = np.random.normal(0,1,#number of elements you get in array noise)
new_signal = original noise
# https://stackoverflow.com/questions/14058340/adding-noise-to-a-signal-in-python
所以結果 df 看起來像下面這樣(這些值只是結果輸出的一個例子):
df = pd.DataFrame({
"id":[1,1,1,1,2,2 ,3,3,3,3, 4,4],
"time": [1,2,3,4,5,6 ,7,8,9,10, 11,12 ],
"x": [1,2,3,4,9,11, 1.0005,2.3256,3.1256,4.5647, 9.6514,11.4567 ],
"y": [5,6,7,8,3,2, 5.0505,6.0276,7.1056,8.5607, 3.6014,2.4567],
})
如您所見:添加了 2 個新 ID(3 和 4)以及帶有噪聲的值。
目前我正在嘗試使用不同的回圈,但它似乎很復雜。有什么建議?
獎勵問題:如何不僅復制,而且將其添加 3 次。
uj5u.com熱心網友回復:
您可以構建一個新的資料框并將它們連接起來:
df1 = pd.concat([df['id'] df['id'].max(),
df['time'] df['time'].max(),
df['x'] np.random.normal(0, 1, len(df)),
df['y'] np.random.normal(0, 1, len(df))], axis=1) \
.set_index(df.index len(x))
out = pd.concat([df, df1])
輸出:
>>> out
id time x y
0 1 1 1.000000 5.000000
1 1 2 2.000000 6.000000
2 1 3 3.000000 7.000000
3 1 4 4.000000 8.000000
4 2 5 9.000000 3.000000
5 2 6 11.000000 2.000000
10 3 7 1.479734 5.720535
11 3 8 0.076273 6.256060
12 3 9 2.856642 6.845974
13 3 10 4.119396 7.738969
14 4 11 9.220569 2.710783
15 4 12 10.451495 1.245976
uj5u.com熱心網友回復:
您可以reindex添加值以增加 id、時間并在資料上添加噪聲。
這適用于任意數量的重復:
import numpy as np
N = 3
(df.reindex(np.tile(df.index, N)) # replicate N times the dataframe
.add(np.c_[np.repeat(np.arange(N), len(df)), # increment id
np.repeat(np.arange(N), len(df))*len(df), # increment time
np.r_[np.zeros((len(df), 2)), # no noise for first
np.random.normal(size=(len(df)*(N-1), 2))] # extra noise
])
)
示例N=3:
id time x y
0 1.0 1.0 1.000000 5.000000
1 1.0 2.0 2.000000 6.000000
2 1.0 3.0 3.000000 7.000000
3 1.0 4.0 4.000000 8.000000
4 2.0 5.0 9.000000 3.000000
5 2.0 6.0 11.000000 2.000000
0 2.0 7.0 0.651240 4.713942
1 2.0 8.0 1.426533 5.446687
2 2.0 9.0 3.187928 7.430646
3 2.0 10.0 2.998382 9.421992
4 3.0 11.0 10.282871 2.108504
5 3.0 12.0 10.531258 2.439636
0 3.0 13.0 -0.200542 5.286711
1 3.0 14.0 0.350241 8.114173
2 3.0 15.0 1.843902 6.725896
3 3.0 16.0 3.831534 7.964400
4 4.0 17.0 7.612370 2.737872
5 4.0 18.0 12.129517 2.809689
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/409844.html
標籤:
下一篇:回圈總和不包括一列熊貓資料框
