[解決済み] pandas データフレームの選択された列の値のユニークな組み合わせとカウント
質問
pandasのデータフレームに以下のようなデータが入っています。
df1 = pd.DataFrame({'A':['yes','yes','yes','yes','no','no','yes','yes','yes','no'],
'B':['yes','no','no','no','yes','yes','no','yes','yes','no']})
ということで、私のデータは以下のようになります。
----------------------------
index A B
0 yes yes
1 yes no
2 yes no
3 yes no
4 no yes
5 no yes
6 yes no
7 yes yes
8 yes yes
9 no no
-----------------------------
これを別のデータフレームに変換したい。 期待される出力は以下のpythonスクリプトで示すことができます。
output = pd.DataFrame({'A':['no','no','yes','yes'],'B':['no','yes','no','yes'],'count':[1,2,4,3]})
つまり、私の期待する出力は次のようなものです。
--------------------------------------------
index A B count
--------------------------------------------
0 no no 1
1 no yes 2
2 yes no 4
3 yes yes 3
--------------------------------------------
実は、以下のコマンドを使えば、すべての組み合わせを見つけ出し、カウントすることができる。
mytable = df1.groupby(['A','B']).size()
しかし、そのような組み合わせは1つの列になっていることがわかりました。 私は、組み合わせの各値を別のカラムに分離し、さらにもう1つカラムを追加して、カウントの結果を表示したいと思います。 そのようなことは可能でしょうか? ご教授願えませんでしょうか。 よろしくお願いします。
どのように解決するのですか?
あなたは
groupby
を呼び出すと、'A' と 'B' の列で
size
で、次に
reset_index
と
rename
は、生成されたカラムです。
In [26]:
df1.groupby(['A','B']).size().reset_index().rename(columns={0:'count'})
Out[26]:
A B count
0 no no 1
1 no yes 2
2 yes no 4
3 yes yes 3
更新
少し説明すると、2つの列でグループ化することで、AとBの値が同じ行をグループ化しています。
size
で、ユニークなグループの数を返します。
In[202]:
df1.groupby(['A','B']).size()
Out[202]:
A B
no no 1
yes 2
yes no 4
yes 3
dtype: int64
そこで、グループ化されたカラムを復元するために
reset_index
:
In[203]:
df1.groupby(['A','B']).size().reset_index()
Out[203]:
A B 0
0 no no 1
1 no yes 2
2 yes no 4
3 yes yes 3
これはインデックスを復元しますが、サイズ集計は生成されたカラムに変わります。
0
そのため、この名前を変更する必要があります。
In[204]:
df1.groupby(['A','B']).size().reset_index().rename(columns={0:'count'})
Out[204]:
A B count
0 no no 1
1 no yes 2
2 yes no 4
3 yes yes 3
groupby
はアーギュメントを受け付けます。
as_index
に設定することができます。
False
ということで、グループ化されたカラムをインデックスにしないのですが、これだと
series
で、やはりインデックスの復元などが必要になりますね......。
In[205]:
df1.groupby(['A','B'], as_index=False).size()
Out[205]:
A B
no no 1
yes 2
yes no 4
yes 3
dtype: int64
関連
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み】Flaskのテンプレートが見つからない【重複あり
-
[解決済み] データフレームをピボットするにはどうしたらいいですか?
-
[解決済み] pandasデータフレームの列を正規化する。
-
[解決済み] groupbyでグループ内の最大値を持つ行を取得する。
-
[解決済み] Pandasのカラムの合計を取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python string splicing.join()とsplitting.split()の説明
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
任意波形を生成してtxtで保存するためのPython実装
-
Python Pillow Image.save jpg画像圧縮問題
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み] pandasの一意な値複数の列