以下は、私が持っているデータセットの簡易版である:スライスと再インデックス多次元データセット
import numpy as np
import pandas as pd
import xarray as xr
np.random.seed(123)
times = range(10)
a = np.array([0,0,0,0,0,0,0,1,1,1]).reshape(10,1)
b = np.array([0,1,1,1,1,0,0,0,0,0]).reshape(10,1)
val1 = np.random.randn(10,1)
val1 = np.append(val1,a,1)
val2 = np.random.randn(10,1)
val2 = np.append(val2,b,1)
ds = xr.Dataset({'1st': (('time', 'attr'), val1),
'2nd': (('time', 'attr'), val2)},
{'time': times, 'attr': ['val', 'mode']})
私がやろう何、変数「第一」と「第二」のパンダのデータフレームを作成することです、モード== 1に従ってのみフィルタリングされ、すべてのデータが左に揃えられます(つまり、データフレームの両方の列がインデックス0から始まり、短い列は最後にいくつかのNaNがあります)。ここ
は、その上に私ではないので、成功したテイクです:mask = ds.sel(attr='mode')==1
maskedds = ds.where(mask)
maskedds = maskedds.dropna('time',how='all')
maskedds = maskedds.reset_index('time',drop=True)
test = maskedds.sel(attr='val').to_dataframe()
私はパンダで結果のデータをクリアすることができますが、私の実際のデータは、はるかに大きいと私は便利なスライスを探していると行ってインデックスの再作成しますxarrayで
ご協力いただきありがとうございます。
編集: さて、あなたは私のオリジナルのポストを見てみましょう場合 - 私が含まれている「試験」データフレーム構築:
:attr 2nd 1st
time
0 val -0.094709 NaN
1 val 1.491390 NaN
2 val -0.638902 NaN
3 val -0.443982 NaN
4 val NaN -0.428913
5 val NaN 1.265936
6 val NaN -0.866740
を私は後に探しています何がこのようなものです私は手動で次のようにNaNを洗浄することにより得
attr 2nd 1st
time
0 val -0.094709 -0.428913
1 val 1.491390 1.265936
2 val -0.638902 -0.866740
3 val -0.443982 NaN
4 val NaN NaN
5 val NaN NaN
6 val NaN NaN
:
nonan = test['1st'].dropna().reset_index(drop=True)
test['1st'] = nonan
しかし、私の実際のデータはかなり大きいので、私はxarrayライブラリを利用してこれを行うエレガントな方法を探しています(そうでなければ、私は手動で複数のパンダのデータフレームを扱うことができます...)
xarraで変数ごとの操作をすべて行うことができます同様の 'reset_index()'と 'dropna()'メソッドを使ってパンダの代わりにyを返します。しかし、あなたはあなたのデータからアラインメントを取り除く操作をしようとしているので、あなたがパンダと同じように変数をループすることを避ける方法は考えられません。また、xarrayやpandasもそう簡単にすることはできません。 – shoyer