2
私は2頭のパンダシリーズを持って、別のインデックスを持つ各:私がやりたい何異なるインデックスのパンダシリーズをブロードキャストする方法は?
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'))
がufuncを実行する前に、1つの軸に沿ってBをブロードキャストするパンダを指示するa.mul(b, axis=1)
の線に沿って何かである(たとえば、乗算する、等の力を上げるなど)。 applyを使うよりも、これを行う良い方法はありますか?
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
申し訳ありません - 私はスーパー明確ではありませんでした。この問題の一般的な解決策があるかどうか、特に2つの引数をとるufunc(たとえば、mul、div、add、sub、powなど)があるかどうかを知りたい。本質的に問題は、(4x1)行列と(1x5)行列のように、numpy行列を使って計算を行うと、これらの操作を実行でき、ブロードキャストが自動的に処理されることです。しかし、サイズ(4、5)のシリーズでは、最初に数値をnumpy形式に変換しなければ、不一致を処理できません。これはどうですか? – delgadom
一般的に、Pandasの操作は、NDFrameのインデックスに対して** align **を試みます。上記のような熟考している操作では、Seriesインデックスを無視し、NumPyの場合と同じように*値*をブロードキャストします。それはパンダのためのものではありません。データをインデックスレス配列として扱いたい場合はいつでも、NumPy not Pandasを使用してください。 – unutbu
私は本当にインデックスを無視したくない...私は新しいインデックスに沿って放送中にそれらを維持したい。しかし、あなたのメソッドの抽象化を使用することが最善の方法であると思われます。たとえば、 'outer_opr = lambda x、y、opr:pd.DataFrame(opr(x.values.reshape((len(x)、1)) 、y.values.reshape((1、len(y))))、index = x.index、columns = y.index) ' – delgadom