🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

pandas

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

Q&A

解決済

2回答

6543閲覧

pandasで2つのdataframeの平均値を算出した新たなdataframeを作成したい

SuzuAya

総合スコア71

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

pandas

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

0グッド

0クリップ

投稿2021/03/11 02:57

以下のような内容のdataframe 2種類があった場合に、それぞれの平均値を記した新たなdataframeをpandasを使用して作成することはできるでしょうか。
調べてみたのですが、該当するような記事を見つけることができなかったため、こちらに質問をさせていただきました。
ご存知の方、ご教示いただけますと幸いです。
![イメージ説明
イメージ説明

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

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

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

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

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

xail2222

2021/03/11 03:15

df3=(df1+df2)/2 と言うこと?
SuzuAya

2021/03/11 03:37

>xail2222様 ご理解の通りです。説明が不足しており、お手数をお掛けしました…。
guest

回答2

0

別解として。
pd.concatで2つのデータフレームを連結後、image No.groupbyし、meanメソッドを適用する。

今回のデータに関しては、得られる結果は別回答と同じ。
片方にしかない「image No.」の値が存在する場合でも、こちらのコードでは正確な平均値が得られる。

Python

1import pandas as pd 2import io 3 4txt1 = """ 5image No.,class0,class1 61,0.244512,0.717671 72,0.275963,0.158716 83,0.568062,0.962811 94,0.302490,0.880233 105,0.350598,0.186555 116,0.540160,0.382935 127,0.535181,0.411064 138,0.260954,0.904651 149,0.102384,0.345076 1510,0.578347,0.215839 16""" 17 18txt2 = """ 19image No.,class0,class1 201,0.450488,0.806578 212,0.528894,0.878562 223,0.102305,0.433922 234,0.262775,0.813061 245,0.558715,0.653314 256,0.935569,0.450163 267,0.774353,0.568943 278,0.142221,0.317147 289,0.394469,0.590419 2910,0.616432,0.933424 30""" 31 32df1 = pd.read_csv(io.StringIO(txt1)) 33df2 = pd.read_csv(io.StringIO(txt2)) 34 35print(pd.concat([df1, df2]).groupby("image No.").mean())

result

1 class0 class1 2image No. 31 0.347500 0.762125 42 0.402428 0.518639 53 0.335183 0.698367 64 0.282633 0.846647 75 0.454657 0.419935 86 0.737865 0.416549 97 0.654767 0.490004 108 0.201588 0.610899 119 0.248426 0.467747 1210 0.597390 0.574631

投稿2021/03/11 03:50

編集2021/03/11 04:43
Daregada

総合スコア11990

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

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

SuzuAya

2021/03/11 07:05

>Daregada様 別解をご教示くださりありがとうございます!試したところ、うまくいきました。大変参考になりました。 ちなみに、平均ではなく、加重平均(例えばdf1は0.7, df2は0.3)の値でdf3を新たに作成するというようなことも可能なのでしょうか(当初の質問と異なる質問をしてしまい申し訳ありません。別途質問をした方が良ければお知らせください)。
Daregada

2021/03/12 01:11

pd.concat([df1.set_index('ID') * 0.3, df2.set_index('ID') * 0.7]).groupby("ID").sum() とでもすれば(set_indexが必要になり、末尾の関数がsumに変わることに注意)、加重平均した結果が得られます。どちらかに存在しないIDがあると、それは値が0であると見なされます。
guest

0

ベストアンサー

こんなのでいいですか。

python

1>>> print(df1) 2 image No. class0 class1 30 1 0.244512 0.717671 41 2 0.275963 0.158716 52 3 0.568062 0.962811 63 4 0.302490 0.880233 74 5 0.350598 0.186555 85 6 0.540160 0.382935 96 7 0.535181 0.411064 107 8 0.260954 0.904651 118 9 0.102384 0.345076 129 10 0.578347 0.215839 13>>> print(df2) 14 image No. class0 class1 150 1 0.450488 0.806578 161 2 0.528894 0.878562 172 3 0.102305 0.433922 183 4 0.262775 0.813061 194 5 0.558715 0.653314 205 6 0.935569 0.450163 216 7 0.774353 0.568943 227 8 0.142221 0.317147 238 9 0.394469 0.590419 249 10 0.616432 0.933424 25>>> df3 = ((df1.set_index('image No.')+df2.set_index('image No.'))/2).reset_index() 26>>> print(df3) 27 image No. class0 class1 280 1 0.347500 0.762124 291 2 0.402428 0.518639 302 3 0.335184 0.698367 313 4 0.282632 0.846647 324 5 0.454657 0.419935 335 6 0.737865 0.416549 346 7 0.654767 0.490004 357 8 0.201588 0.610899 368 9 0.248427 0.467748 379 10 0.597390 0.574631

投稿2021/03/11 03:21

ppaul

総合スコア24670

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

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

SuzuAya

2021/03/11 03:36

>ppaul様 いつもご回答ありがとうございます!まさにやりたかったことです。大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問