1. ホーム
  2. python

[解決済み] pandasのデータフレームを複数のカラムでフィルタリングする方法

2022-05-04 02:40:47

質問

データフレーム(df)を1列でフィルタリングする場合、男性と女性のデータを考える場合、以下のようになります。

males = df[df[Gender]=='Male']

質問1 - しかし、データが複数の年にまたがっていて、2014年の男性だけを見たい場合はどうすればいいのでしょうか?

他の言語では、次のようなことをするかもしれません。

if A = "Male" and if B = "2014" then 

(ただし、こうして新しいデータフレームオブジェクトで元のデータフレームのサブセットを取得したい)

質問2.これをループで行い、年と性別のユニークなセットごとにdataframeオブジェクトを作成するにはどうしたらよいでしょうか(つまり、df for: 2013-男性、2013-女性、2014-男性、2014-女性。

for y in year:

for g in gender:

df = .....

解決方法は?

使用方法 & 演算子を使用する場合は、サブステートメントを () :

males = df[(df[Gender]=='Male') & (df[Year]==2014)]

データフレームを格納するために dict をforループで使用します。

from collections import defaultdict
dic={}
for g in ['male', 'female']:
  dic[g]=defaultdict(dict)
  for y in [2013, 2014]:
    dic[g][y]=df[(df[Gender]==g) & (df[Year]==y)] #store the DataFrames to a dict of dict

EDIT

のデモです。 getDF :

def getDF(dic, gender, year):
  return dic[gender][year]

print genDF(dic, 'male', 2014)