6

異なる列ラベルを持つ 2 つのデータフレームを乗算 (追加/分割/など) しようとしています。

これが可能だと確信していますが、それを行うための最良の方法は何ですか? 最初に rename を使用して 1 つの df の列を変更しようとしましたが、(1) それはしたくなく、(2) 実際のデータには列にマルチインデックスがあります (マルチインデックスの 1 つのレイヤーだけが異なるラベルを付けられています)。 )、その場合、名前の変更は難しいようです...

私の質問を一般化するために、どうすれば乗算する列を定義するためにdf1 * df2使用できますか?map

df1 = pd.DataFrame([1,2,3], index=['1', '2', '3'], columns=['a', 'b', 'c'])
df2 = pd.DataFrame([4,5,6], index=['1', '2', '3'], columns=['d', 'e', 'f'])
map = {'a': 'e', 'b': 'd', 'c': 'f'}

df1 * df2 = ?
4

5 に答える 5

7

私もこの問題に悩まされました。パンダには行列乗算が必要なようです。両方のデータフレームに同じ列名が必要です。

よく検索したところ、設定の拡大の例がデータフレームに1列追加されていることがわかりました。

ご質問については、

rs = pd.np.multiply(ds2, ds1)

rs は ds2 と同じ列名になります。

複数の列を同じデータフレーム内の他のサーバー列と乗算し、これらの結果を元のデータフレームに追加するとします。

たとえば、ds1、ds2 は同じデータフレーム ds にあります。私たちはできる

ds[['r1', 'r2', 'r3']] = pd.np.multiply(ds[['a', 'b', 'c']], ds[['d', 'e', 'f']])

これらが役立つことを願っています。

于 2015-02-26T22:31:01.863 に答える
2

pd.np が非推奨になったため、ソリューションを更新しました。df1.multiply(np.array(df2)

df1 の列名を保持し、それらを df2 の列で順番に乗算します

于 2021-07-12T04:17:39.580 に答える
0

インデックスが既に配置されていると仮定すると、両方の DataFrame の列を正しい順序で配置し、両方の DataFrame を分割するだけでよいでしょう.values

仮定mapping = {'a' : 'e', 'b' : 'd', 'c' : 'f'}

v1 = df1.reindex(columns=['a', 'b', 'c']).values
v2 = df2.reindex(columns=['e', 'd', 'f']).values
rs = DataFrame(v1 / v2, index=v1.index, columns=['a', 'b', 'c'])
于 2012-09-21T01:12:41.477 に答える