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

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

新規登録して質問してみよう
ただいま回答率
85.50%
GROUP BY

GROUP BYとはSQL文のひとつで、SELECT文において特定の列の値が等しい行ごとに表をグループ化します。

Python

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

pandas

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

Q&A

解決済

2回答

4464閲覧

Python groupby 複数列集計について

junjunn

総合スコア19

GROUP BY

GROUP BYとはSQL文のひとつで、SELECT文において特定の列の値が等しい行ごとに表をグループ化します。

Python

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

pandas

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

0グッド

0クリップ

投稿2021/12/14 08:37

編集2021/12/15 05:46

pandas dataframeで、複数の列をグルーピングして列ごとで合計出したいのですが、
良い方法ありますでしょうか。

data1
|列1|列2|列3|・・・|列n
|:--|:--:|--:|・・・|n
|Group1|3|1|・・・|n1
Group2|4|3|・・・|n2
Group1|4|6|・・・|n3

data2(得たいdataframe)
|列1|列2|列3|・・・|列n
|:--|:--:|--:|・・・|n
|Group1|7|7|・・・|n1+n3
Group2|4|3|・・・|n2

現状は
pd.DataFrame(data1.groupby("列1")["ここが分かりません"].sum())
で複数列指定の仕方が分かりません。
nは大きい値として、1つ1つの列を列挙し指定するのではなく、
[列2:列3]のような形では指定不可でしょうか?

--追記--
pandas groupbyでの数値データは型の縛りはあるのでしょうか?

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

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

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

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

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

melian

2021/12/14 08:42

列1 の名前で大文字・小文字の違いは無視して集計するということでしょうか?
junjunn

2021/12/15 04:42

すみません、group1は記載ミスです。行名は完全一致で集計します。
melian

2021/12/15 06:19

確かに sympy.core.numbers.Float が混じっている列は集計されませんね。一応、sum() に numeric_only=False を指定すれば集計してくれる様になります。 df.groupby('c1').sum(numeric_only=False).reset_index()
guest

回答2

0

ベストアンサー

とりあえずすべての列について.sumすればよいかと思います。
あとは.ilocなりで必要な列のみ取得できます。

Python

1import pandas as pd 2 3df = pd.DataFrame({'c1':['G1','G2','G1'], 'c2':[3,4,4], 'c3':[1,3,6], 'cn':[1,2,3]}) 4ret = df.groupby('c1').sum().reset_index() 5print(ret) 6# c1 c2 c3 cn 7#0 G1 7 7 4 8#1 G2 4 3 2 9 10print(ret.iloc[:,1:]) 11# c2 c3 cn 12#0 7 7 4 13#1 4 3 2

投稿2021/12/14 08:48

can110

総合スコア38234

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

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

junjunn

2021/12/15 04:48

ご回答ありがとうございます。記載不足だったのですが、すべての列に対しsumしても集計されない複数列があって、その列は指定すれば集計できるのでいっそまとめて指定する形があればなと... ちなみにそれら列には数値データが入っています。
can110

2021/12/15 05:07

「集計されない」という状況がよく分かりませんが その(本当の)問題に絞って別に質問を立てたほうがよいと思います。
junjunn

2021/12/15 05:14

その通りです。ちなみに数値データの型を確認したところsympyのsolverで算出された値であるため'sympy.core.numbers.Float' なのですが、pandas groupbyでの集計は不向きであるということでしょうか?
guest

0

以下です。

python

1>>> print(data1) 2123 列n 30 Group1 3 1 10 41 Group2 4 3 20 52 Group1 4 6 30 6>>> ata2 = data1.groupby('列1').sum().reset_index() 7>>> print(data2) 8123 列n 90 Group1 7 7 40 101 Group2 4 3 20

投稿2021/12/14 08:45

ppaul

総合スコア24666

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

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

junjunn

2021/12/15 04:49

ご回答ありがとうございます。(他回答者様と同様の返答になります。)記載不足だったのですが、すべての列に対しsumしても集計されない複数列があって、その列は指定すれば集計できるのでいっそまとめて指定する形があればなと... ちなみにそれら列には数値データが入っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問