質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

3回答

732閲覧

Python dfの全ての列同士で引算のやり方

Trek

総合スコア2

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/12/13 09:45

A B C D E ... Z
date
1 100 200 105 90 110 ... 100
2 105 195 110 100 115 ...120
3 120 210 120 90 120 ... 105
4 150 150 100 110 140 ... 140
5 100 140 150 100 130 ... 160

このようなdfがあったとして、全ての列同士の組み合わせで引算(A-A,A-B,A-C…,B-A,B-B…,Z-Zみないな)をする場合、Pythonを使用してプログラミングする場合どのようにしたら良いでしょか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/12/13 10:33

> 全ての列同士の組み合わせで引算 演算の結果はどうするのでしょうか?
Trek

2021/12/13 10:50

可能なら新たなDataFrameとして演算の結果を求めたいです
guest

回答3

0

python

1import pandas as pd 2import numpy as np 3from numpy.random import default_rng 4from string import ascii_uppercase 5 6# dataframe for testing 7rg = default_rng() 8nrow, ncol = 5, len(ascii_uppercase) 9df = pd.DataFrame(rg.integers(50, 300, (nrow, ncol)), columns=[*ascii_uppercase]) 10 11# permutation 12v = df.values 13i = np.arange(ncol).repeat(ncol-1) 14j = np.tile(np.arange(ncol), (ncol, 1))[~np.eye(ncol, dtype=bool)] 15dfx = pd.DataFrame(v[:, i]-v[:, j], df.index, [df.columns[i]+'-'+df.columns[j]]) 16 17print(df) 18print(dfx) 19 20# 21 A B C D E F G H ... S T U V W X Y Z 220 258 133 243 58 87 232 253 129 ... 114 81 195 79 150 275 231 204 231 153 157 166 253 286 195 263 220 ... 275 159 154 215 240 172 209 234 242 102 98 167 201 275 218 105 166 ... 203 112 60 123 62 234 281 228 253 145 209 160 73 127 103 239 225 ... 299 218 96 249 278 130 279 201 264 284 216 128 78 120 161 294 203 ... 171 216 161 154 287 62 200 264 27 28[5 rows x 26 columns] 29 30 A-B A-C A-D A-E A-F A-G A-H A-I A-J ... Z-Q Z-R Z-S Z-T Z-U Z-V Z-W Z-X Z-Y 310 125 15 200 171 26 5 129 71 157 ... 70 149 90 123 9 125 54 -71 -27 321 -4 -13 -100 -133 -42 -110 -67 -58 -49 ... 124 125 -41 75 80 19 -6 62 25 332 4 -65 -99 -173 -116 -3 -64 -127 -66 ... 49 -20 25 116 168 105 166 -6 -53 343 -64 -15 72 18 42 -94 -80 -72 4 ... 74 -78 -98 -17 105 -48 -77 71 -78 354 68 156 206 164 123 -10 81 47 36 ... 23 69 93 48 103 110 -23 202 64 36 37[5 rows x 650 columns]

投稿2021/12/13 18:27

melian

総合スコア20655

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

python

1# A B C D E 2#0 100 200 105 90 110 3#1 105 195 110 100 115 4#2 120 210 120 90 120 5#3 150 150 100 110 140 6#4 100 140 150 100 130 7 8df2 = pd.concat({str(i)+'-'+str(j):df[i] - df[j] for i in df.columns for j in df.columns}, axis=1) 9print(df2) 10# A-A A-B A-C A-D A-E B-A B-B B-C B-D B-E ... 11#0 0 -100 -5 10 -10 100 0 95 110 90 ... 12#1 0 -90 -5 5 -10 90 0 85 95 80 ... 13#2 0 -90 0 30 0 90 0 90 120 90 ... 14#3 0 0 50 40 10 0 0 50 40 10 ... 15#4 0 -40 -50 0 -30 40 0 -10 40 10 ...

投稿2021/12/13 13:30

meg_

総合スコア10760

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

使い道があるとは思えませんが、あたまの体操として解いてみました。

python

1>>> import pandas as pd 2>>> import numpy as np 3>>> df = pd.DataFrame(np.random.randint(1,100, (10,26)), columns=list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')) 4>>> print(df) 5 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 60 73 44 88 87 35 92 56 77 29 93 91 19 72 45 98 76 3 74 75 43 40 89 68 15 47 56 71 96 82 26 55 42 78 15 49 44 61 93 21 98 98 36 13 50 60 7 43 98 53 55 99 46 12 82 49 15 54 57 20 38 2 62 67 46 29 68 70 45 3 75 72 35 77 84 84 64 37 60 13 69 93 95 77 62 89 45 59 59 94 73 16 65 71 10 87 1 87 82 5 22 25 65 43 3 86 10 65 104 26 56 11 7 42 67 36 73 40 87 6 61 79 11 57 20 37 38 92 41 94 26 99 59 71 90 115 52 21 6 10 11 26 14 22 19 71 30 79 3 36 11 25 38 61 45 22 8 13 67 57 20 3 126 50 89 89 66 90 95 41 16 11 91 97 32 57 11 65 41 67 74 47 93 22 26 57 23 19 14 137 68 26 58 34 85 72 28 51 60 86 1 69 15 74 1 23 2 32 88 19 89 46 34 44 7 64 148 50 54 63 91 64 67 99 48 94 64 97 52 96 7 13 91 96 3 78 94 21 95 31 23 55 23 159 2 47 6 26 79 54 82 58 24 33 98 42 5 42 90 87 2 75 64 92 11 81 56 78 67 63 16>>> df1 = df.T.reset_index() 17>>> df2 = pd.merge(df1, df1, how='cross') 18>>> df2.index = df2['index_x'] + '-' + df2['index_y'] 19>>> df3 = df2.iloc[:, 1:len(df)+1].T.reset_index(drop=True) - df2.iloc[:, len(df)+2:].T.reset_index(drop=True) 20>>> df3.drop([c + '-' + c for c in df.columns], axis=1, inplace=True) 21>>> print(df3) 22 A-B A-C A-D A-E A-F A-G A-H A-I A-J A-K A-L ... Z-O Z-P Z-Q Z-R Z-S Z-T Z-U Z-V Z-W Z-X Z-Y 230 29 -15 -14 38 -19 17 -4 44 -20 -18 54 ... -42 -20 53 -18 -19 13 16 -33 -12 41 9 241 14 70 41 54 18 81 47 52 35 3 75 ... -24 -1 -38 -48 5 -31 -86 -41 -43 -87 -34 252 34 -5 -8 29 11 47 -13 -18 3 20 -19 ... 66 -6 -3 34 -8 -15 -15 5 32 9 56 263 18 33 6 50 36 36a 1 22 79 30 24 ... 64 -22 -17 60 43 40 0 22 62 -21 55 274 -30 15 19 -16 -41 -10 -47 -14 -61 20 -35 ... 33 70 53 52 -2 49 -4 64 -9 31 19 285 31 46 42 41 26 38 30 33 -19 22 -27 ... -8 -22 -35 -58 -42 -19 -5 -10 -64 -54 -17 296 -39 -39 -16 -40 -45 9 34 39 -41 -47 18 ... -51 -27 -53 -60 -33 -79 -8 -12 -43 -9 -5 307 42 10 34 -17 -4 40 17 8 -18 67 -1 ... 63 41 62 32 -24 45 -25 18 30 20 57 318 -4 -13 -41 -14 -17 -49 2 -44 -14 -47 -2 ... 10 -68 -73 20 -55 -71 2 -72 -8 0 -32 329 -45 -4 -24 -77 -52 -80 -56 -22 -31 -96 -40 ... -27 -24 61 -12 -1 -29 52 -18 7 -15 -4 33 34[10 rows x 650 columns]

投稿2021/12/13 12:08

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問