Çok sayıda farklı meteorolojik tanılama verisiyle uğraşmak için mükemmel pandas
paketini kullanıyorum ve verileri birlikte dikerken boyutlardan hızla çıkıyorum. Belgelere bakarak, MultiIndex
kullanmak benim sorunumu çözebilir, ancak durumumu nasıl uygulayacağımı bilmiyorum - belgeler rastgele verilerle MultiIndexes oluşturma örneklerini ve DataFrame
s dizilerini gösterir. zamanlama verileri.Pandalar veri gruplandırmamı 3'ten fazla boyuta nasıl genelleştirebilirim?
Arka Plan
kullanıyorum temel veri yapısı, iki ana alanları içerir:
metadata
, sayılardır açıklayan önemli değer çiftleri oluşan bir sözlüğü- Sayıları kendileri içeren bir pandalar veri yapısı olan
data
. Temel yapıdata
girdi olarak bir pandalarSeries
nesne vardır, böylece
en düşük ortak payda, timeseries veridir ve metadata
alan bu numaralar aslında üzerinde 10 metrelik rüzgar için (örneğin vektör RMS hatası ne anlatır Doğu Pasifik'i deneyden 24 saat tahmini için Test1).
En düşük ortak paydayı alıp çeşitli zaman dilimlerini birbirine yapıştırıp sonuçları daha kullanışlı hale getirmek ve kolay kombinasyonlar sağlamak için arıyorum. Örneğin, tüm farklı teslim sürelerine bakmak isteyebilirim - teslim süresi için (örn. Deneme, bölge, vb.) Hariç aynı meta veri girişlerini paylaşan zaman çizelgeleri alacağım bir filtre rutinim var ve metadata
alanının yalnızca ortak girdilerden oluştuğu nesne (Lead Time
kaldırıldı) ve şimdi data
alanı DataFrame
pandalarıdır ve Lead Time
değeri tarafından verilen sütun etiketleridir. Bunu tekrar uzatabilir ve sonuçta ortaya çıkan kareleri ve onları grubunu Panel
pandaları vermek için sadece başka bir girişle (örneğin Experiment
) birlikte almak istediğimi söyleyebilirim. öğe dizininin Experiment
meta veri değerlerinin oluşturucu çerçevelerinden verildiği girişimde ve nesnenin yeni meta verileri Lead Time
veya Experiment
içermiyor.
I bu kompozit nesne yineleme, ben değişen teslim süresi ile çerçeveden bir boyut (yani, dizi damla olarak uygun meta/veri eşleştirme yeniden panel için bir çerçeve için iterseries
rutin ve iterframes
rutin sütunların üst kısmında, ve numaralı tüm meta veriler, sütun etiketinden alınan değerle geri yüklenen Lead Time
alanı olacaktır. Bu harika çalışıyor. Her şey içinde hizalanmış bir kez
Ben boyutlar kalmadı
Sorun (en fazla 3 boyutlu bir Panellilerde) ve ben de boş sütunları kaldırmak için dropna
gibi şeyler kullanmak mümkün değilim Panel (bu, özet istatistikleri çizerken birkaç hataya yol açmıştır). Daha yüksek boyutlu verilerle pandaların kullanımı hakkında okuma, MultiIndex
ve kullanımı hakkında okumaya yol açmıştır. Dokümantasyonda verilen örnekleri denedim, ancak durumuma nasıl uygulanacağını hala belirsiz hâle getiriyorum. Herhangi bir yön yararlı olacaktır.Ben edebilmek istiyorum:
- içine benim
Series
tabanlı veri birleştirin çok endeksli (bu harika olurdu boyutları keyfi bir sayı boyuncaDataFrame
- bu kareleri oluşturmak için bir arama ortadan kaldıracak series, ve sonra çerçevelerden çerçeveler oluşturmak için başka bir tane) - Oluşan çok endeksli
DataFrame
üzerinde yineleyin, tek bir boyut bırakarak bileşen meta verisini sıfırlayabilirim.
Düzen - Kod Örneği ekle
aşağıda Wes McKinney yanıtıdır ihtiyacım neredeyse tam olarak ne - konu benim DataFrame için birlikte çalışmak zorunda Serisi destekli depolama nesnelerden ilk çeviride olduğu Öğeleri gruplandırmaya başladığımda geri dönen nesneler. Data-Frame destekli sınıf, dizi tabanlı nesnelerin ve sütunlar arasında değişecek meta veri alanının bir listesini alan aşağıdaki yönteme sahiptir.
@classmethod
def from_list(cls, results_list, column_key):
"""
Populate object from a list of results that all share the metadata except
for the field `column_key`.
"""
# Need two copies of the input results - one for building the object
# data and one for building the object metadata
for_data, for_metadata = itertools.tee(results_list)
self = cls()
self.column_key = column_key
self.metadata = next(for_metadata).metadata.copy()
if column_key in self.metadata:
del self.metadata[column_key]
self.data = pandas.DataFrame(dict(((transform(r[column_key]), r.data)
for r in for_data)))
return self
Bu rutin tarafından verilen çerçeve ulaştıktan sonra, kolayca uygula çeşitli işlemler aşağıda önerilen - Bu saklamak ihtiyacını ortadan kaldırır - özellikle programını ben çağrı concat
zaman names
alanını kullanmak mümkün ediliyor Bu sütun boyutunun adı, MultiIndex'te bu dizin boyutunun adı olarak depolandığından dahili olarak .
Aşağıdaki çözümü uygulayabilmeyi ve sıralı dizi destekli sınıflar ile anahtarların listesini almayı ve sıralı olarak gruplamayı yapabilmeyi istiyorum. Ancak, ben sütunları böylece, vaktinden temsil edecek bilmiyorum:
- gerçekten 1-D DataFrame
- ı don içinde Serisi verileri depolamak için bana mantıklı değil içinde bir MultiIndex oluşturmak için birlikte Seri DataFrames tutkal olarak
keys
bağımsız değişken ile birliktepandas.concat
kullanılarak önerebilir
Güzel! Bu benim ihtiyacım olan şey gibi görünüyor - şimdi onu denemek ve görmek için. –
Sonunda tam olarak N boyutlu bir nesneye sahip olmayı planlıyorum, ancak bir çok durumda kesinlikle gerekli olmadı –
Tamam - Ben her şeyi takip et ama ilk adımı (yani ilk DataFrame'e sahip olduğumda aldım)). Bu, bazı temel birleştirme yöntemini kullanarak Seri nesneler listemi (temel veri yapılarında) almam ve bir DataFrame oluşturmam gerekecek ve sonra bir dizi bitiştirme serisini yapmam gerekecek mi yoksa daha iyi bir yol var mı? ? –