私は、それぞれがタイムスタンプの範囲のあるサブセットに存在するIDからなるデータセットを持っています。 1813のタイムスタンプ[0、...、1812]があり、すべてのタイムスタンプ上にいくつかのIDが存在し、範囲(0、n)、一部(n、m)、一部(m、1812)各IDには、それが存在する各タイムスタンプに108個の機能があります。ndarrayの1次元を0で埋める
私は現在、次の行でndarray
を作成する:
# Shape: (1424, ?, 108) = (numIDs, numIDTimestamps, numFeatures)
inputMatrix = np.array([df.loc[df['id'] == ID, [feature for feature in features]].as_matrix() for ID in IDs])
ここ寸法1における各要素は、このIDが上に存在するタイムスタンプの数に等しい長さです。代わりに、私は擬似コードで108
な長さの配列を0で指定されたIDのいずれかの存在しないタイムスタンプをパディング、長さ1813であるように、このディメンション内のすべての要素が必要になります。
最もは何for each ID:
for each timestamps:
if ID exists at timestamp:
append its array of 108 features
else:
append array of 108 0s
これを私が以前に行ったのと同様の方法で達成するための効率的な、Pythonの方法?ここでEDIT
は、私はパンダDATAFRAMEにインポート私のデータセットのサンプル構造である:
id timestamp derived_0 ... technical_108 y
10 0 0.370326 ... NaN -0.011753
11 0 0.014765 ... NaN -0.001240
12 0 -0.010622 ... NaN -0.020940
25 0 NaN ... NaN -0.015959
26 0 0.176693 ... NaN -0.007338
... ... ... ... ... ...
2150 1812 -0.123364 ... 0.001004 0.004604
2151 1812 -10.437184 ... 0.044597 -0.009241
2154 1812 -0.077930 ... 0.030816 -0.006852
2156 1812 -0.269845 ... -0.011706 -0.000785
2158 1812 NaN ... NaN 0.003497
そして、これは私が上imputMatrix
ラインまで行っている処理である。
df = df.fillna(df.mean())
# SORT BY LAST TIMESTAMP
df = df.assign(start=df.groupby('id')['timestamp'].transform('min'),
end=df.groupby('id')['timestamp'].transform('max'))\
.sort_values(by=['end', 'start', 'timestamp'])
cols = list(df)
featureNames = ['derived', 'fundamental', 'technical']
features = [col for col in cols if col.split('_')[0] in featureNames]
numFeatures = len(features)
IDs = list((df['id'].unique())) # Sorted by ascending last timestamp
timestamps = list(df['timestamp'].unique()) # Sorted
「最後のタイムスタンプでソートする」とは、DataFrameの行が並べ替えられ、t彼は最低終了タイムスタンプが最初であり、それらのタイムスタンプによって依然として順序付けられています。
例えば:
id timestamp ...
1314 0 ...
1314 1
1314 2
1699 0
1699 1
1699 2
1699 3
...
サンプルデータは本当に役に立ちます – Dark
私の編集に追加しました。 – KOB
したがって、ユニークなタイムスタンプごとに、空の行数を0にして長さを1813にする必要がありますか? – Dark