qui suit est une version simplifiée d'un ensemble de données que j'ai:Slicing et réindexation ensemble de données multidimensionnelle
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']})
Ce que j'essaie de faire, est de créer une trame de données de pandas géants de de la 1ère «des variables et « 2 », filtré uniquement selon le mode == 1, et toutes les données sont alignées vers la gauche (c.-à-d. les deux colonnes de la trame de données commencent à l'index 0 et la colonne la plus courte aura quelques valeurs NaN à la fin).
ici est mon pas prendre un tel succès sur elle:
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()
je pouvais effacer les données obtenues en pandas géants, mais mes données réelles est beaucoup plus grande et je suis à la recherche d'un découpage pratique et Réindexation fait dans xarray.
Merci d'avance pour l'aide.
Edit: Eh bien, si vous regardez mon message original - je construisais le 'test' dataframe qui contient:
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
Ce que je suis à la recherche est quelque chose comme après:
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
que je suis arrivé en nettoyant manuellement le Nans comme ceci:
nonan = test['1st'].dropna().reset_index(drop=True)
test['1st'] = nonan
Mais Puisque mes données réelles sont assez grandes, je cherche une manière élégante de faire ceci using la bibliothèque de xarray (autrement je peux travailler avec de multiples dataframes de pandas manuellement ...)
Vous pouvez effectuer toutes vos manipulations par variable dans xarra y à la place des pandas en utilisant les méthodes 'reset_index()' et 'dropna()' similaires. Mais je ne peux pas penser à un moyen d'éviter la boucle sur les variables comme vous le faites avec les pandas, parce que vous essayez de faire une opération qui supprime l'alignement de vos données, et ni xarray ni pandas ne sont conçus pour rendre cela facile. – shoyer