2013-04-02 11 views
7

Ich bin nicht in der Lage, den Eintrag auf der Methode dot()in the official documentation zu finden. Aber die Methode ist da und ich kann sie benutzen. Warum ist das?Get dot-Produkt von Datenrahmen mit Vektor, und zurück Datenrahmen, in Pandas

Zu diesem Thema, gibt es eine Möglichkeit, eine elementweise Multiplikation jeder Zeile in einem Datenrahmen mit einem anderen Vektor zu berechnen? (und erhalten eine dataframe zurück?), d. h. ähnlich wie dot(), aber anstatt das Skalarprodukt zu berechnen, berechnet man das elementweise Produkt.

+0

Sie könnten dies als [ein Problem auf GitHub] (https://github.com/pydata/pandas/issues). Wenn Sie den Docstring an Punkt auschecken, sagt es Ihnen, was es tut (wenn Sie ipython verwenden, verwenden Sie 'df.dot?'). –

Antwort

8

Hier ist ein Beispiel dafür, wie ein Datenrahmen durch einen Vektor zu multiplizieren:

In [60]: df = pd.DataFrame({'A': [1., 1., 1., 2., 2., 2.], 'B': np.arange(1., 7.)}) 

In [61]: vector = np.array([2,2,2,3,3,3]) 

In [62]: df.mul(vector, axis=0) 
Out[62]: 
    A B 
0 2 2 
1 2 4 
2 2 6 
3 6 12 
4 6 15 
5 6 18 
+0

Danke !. Weißt du, warum 'dot()' nicht Teil des offiziellen Dokuments ist? –

+2

Es gibt zwei 'Punkt' Methoden in Pandas. 'Series.dot' wird von' ndarray.dot' übernommen, da 'Series' eine Unterklasse von 'ndarray' von NumPy ist. Sie finden die Dokumentation dazu [hier] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html). Wie bei "DataFrame.dot" ist meine Vermutung, dass sie es einfach nicht geschafft haben, es zu dokumentieren. (Sein Verhalten ist ziemlich verständlich, wenn man seine Definition in 'pandas/core/frame.py' ansieht.) – unutbu

+1

Update:' pandas.Series' ist nicht mehr eine Unterklasse von 'ndarray', aber es hat immer noch einen [' Punkt 'Methode] (http://pandas.pydata.org/pandas-docs/version/0.13.1/generated/pandas.Series.dot.html). – unutbu

1

Es ist ziemlich schwer mit einer Genauigkeit zu sagen.

Oft existiert eine Methode und ist nicht dokumentiert, da sie vom Hersteller als intern betrachtet wird und Änderungen unterliegen kann.

Es könnte natürlich eine einfache Aufsicht von den Leuten sein, die die Dokumentation zusammenstellen.

In Bezug auf Ihre zweite Frage; Ich weiß es nicht wirklich - aber vielleicht ist es besser, eine neue S/O-Frage zu stellen. Scannen Sie einfach die API, könnten Sie etwas mit der Funktion .applymap (function) des DataFrames tun?

6

Multiply tut im Wesentlichen ein äußeres Produkt. Dot ist ein inneres Produkt, wenn mein linearer Algebra-Speicher korrekt ist. Lassen Sie mich auf die akzeptierte Antwort erweitern:

In [13]: df = pd.DataFrame({'A': [1., 1., 1., 2., 2., 2.], 'B': np.arange(1., 7.)}) 

In [14]: v1 = np.array([2,2,2,3,3,3]) 

In [15]: v2 = np.array([2,3]) 

In [16]: df.shape 
Out[16]: (6, 2) 

In [17]: v1.shape 
Out[17]: (6,) 

In [18]: v2.shape 
Out[18]: (2,) 

In [24]: df.mul(v2) 
Out[24]: 
    A B 
0 2 3 
1 2 6 
2 2 9 
3 4 12 
4 4 15 
5 4 18 

In [26]: df.dot(v2) 
Out[26]: 
0  5 
1  8 
2 11 
3 16 
4 19 
5 22 
dtype: float64 

So:

df.mul nimmt Matrix der Form (6,2) und Vektor (6, 1) und gibt Matrixform (6,2)

Während:

df.dot nimmt Matrix von Form (6,2) und Vektor (2,1) und gibt (6,1) zurück.

Diese sind nicht die gleiche Operation, sie sind (denke ich) äußere und innere Produkte, beziehungsweise.

+1

Danke, ich fand dies die hilfreichste Antwort hier. Besser als die Pandas Doc auch. – smci