以下のような内容のdataframe 2種類があった場合に、それぞれの平均値を記した新たなdataframeをpandasを使用して作成することはできるでしょうか。
調べてみたのですが、該当するような記事を見つけることができなかったため、こちらに質問をさせていただきました。
ご存知の方、ご教示いただけますと幸いです。
![
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/11 03:37
回答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総合スコア11990
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/11 07:05
2021/03/12 01:11
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
総合スコア24670
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。