AND and OR operatorを用いるPythonicな方法 – データフレーム内の任意列の論理積が0となる行を選択して集計(グルーピングして合計)

A pythonic way to use Logical AND and OR operators – StackOverflow

複数のコンディション(或いは条件式)に基づいてブーリアンを取る場合は,numpy.logical_and.reduceがリーズナブルだけど,今のような単純なブール列の計算の場合は,以下の様にやる方がリーズナブルじゃないだろうか.

import io
import pandas as pd


strings = """Domestic   Catsize    Type   Count
   1          0         1      1
   1          1         1      8
   1          0         2      11
   0          1         3      14
   1          1         4      21
   0          1         4      31
"""
df = pd.read_csv(io.StringIO(strings), sep='\s+')
print(df)

res = df.query('Domestic*Catsize==0')
print(res)
print(res.groupby('Type')['Count'].sum())
   Domestic  Catsize  Type  Count
0         1        0     1      1
1         1        1     1      8
2         1        0     2     11
3         0        1     3     14
4         1        1     4     21
5         0        1     4     31
   Domestic  Catsize  Type  Count
0         1        0     1      1
2         1        0     2     11
3         0        1     3     14
5         0        1     4     31
Type
1     1
2    11
3    14
4    31
Name: Count, dtype: int64

或いは,

cond = ~df[['Domestic', 'Catsize']].all(1)
df[cond].groupby('Type')['Count'].sum()
Type
1     1
2    11
3    14
4    31
Name: Count, dtype: int64
広告
カテゴリー: 未分類 パーマリンク

AND and OR operatorを用いるPythonicな方法 – データフレーム内の任意列の論理積が0となる行を選択して集計(グルーピングして合計) への1件のフィードバック

  1. ピンバック: Pandas.DataFrameにおける複数列のブーリアン処理 | 粉末@それは風のように (日記)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中