Ich habe zwei Pandas Serie, die jeweils mit einem anderen Index:Wie verbreitet man Pandas-Serien mit verschiedenen Indizes?
In [2]: a = pd.Series(range(5), index=pd.Index(list('abcde'), name='index'))
In [3]: b = pd.Series(range(4), index=pd.Index(list('ABCD'), name='BIG_INDEX'))
Was nach dem Vorbild der a.mul(b, axis=1)
etwas tun, ich möchte Pandas instruieren b entlang der Achse 1 zu übertragen, bevor sie eine ufunc Durchführung (zB multiplizieren, erhöhen auf die Macht von, etc). Gibt es einen besseren Weg dies zu tun als mit "Anwenden"?
In [4]: a.apply(lambda x: x*b)
Out[4]:
BIG_INDEX A B C D
index
a 0 0 0 0
b 0 1 2 3
c 0 2 4 6
d 0 3 6 9
e 0 4 8 12
Sorry - ich war nicht super klar. Ich würde gerne wissen, ob es eine allgemeine Lösung für dieses Problem gibt, insbesondere für alle zwei Argumente ufuncs (z. B. mul, div, add, sub, pow, etc.). Im Wesentlichen besteht das Problem darin, dass Sie bei Berechnungen mit numperartigen Matrizen, z. B. einer (4x1) -Matrix und einer (1x5) -Matrix, diese Operationen ausführen können und die Übertragung automatisch erfolgt. Aber mit Serien, sagen wir von Größen (4,) und (5,), können Sie nicht mit dem Mismatch umgehen, ohne zuerst die Werte in ein numpiges Format zu konvertieren. Irgendwie in der Nähe? – delgadom
Im Allgemeinen versuchen Pandas-Operationen, ** auf die NDFrame-Indizes auszurichten **. In den Operationen, die Sie erwägen (wie die obige), möchten Sie den Serienindex ignorieren und die * Werte * wie bei NumPy übertragen. Dafür ist Pandas nicht da. Wann immer Sie die Daten als indexloses Array behandeln möchten, verwenden Sie NumPy not Pandas. – unutbu
Nun, ich möchte die Indizes nicht wirklich ignorieren ... Ich möchte sie beibehalten, während ich einen neuen Index ausstrahle. Es scheint, als ob der beste Weg ist, eine Abstraktion Ihrer Methode zu verwenden, zB: 'outer_opr = Lambda x, y, opr: pd.Datenrahmen (opr (x.values.reshape ((len (x), 1)) , y.values.reshape ((1, len (y)))), index = x.index, Spalten = y.index) ' – delgadom