単一の列でデータフレーム(df)をフィルタリングするには、男性と女性のデータを考慮する場合、次のようにします。
males = df[df[Gender]=='Male']
質問1-しかし、データが複数年にわたっており、2014年の男性のみを見たい場合はどうなりますか?
他の言語では、次のようなことをします。
if A = "Male" and if B = "2014" then
(これを行い、新しいデータフレームオブジェクトで元のデータフレームのサブセットを取得する場合を除く)
質問2.ループでこれを行い、年と性別の一意のセットごとにデータフレームオブジェクトを作成する方法(つまり、2013-Male、2013-Female、2014-Male、および2014-Femaleのdf)
for y in year:
for g in gender:
df = .....
&
演算子を使用して、サブステートメントを()
で囲むことを忘れないでください:
males = df[(df[Gender]=='Male') & (df[Year]==2014)]
Forループを使用してdict
にデータフレームを保存するには:
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
getDF
のデモ:
def getDF(dic, gender, year):
return dic[gender][year]
print genDF(dic, 'male', 2014)
フィルタとして使用し、複数の列に依存するより一般的なブール関数の場合、次を使用できます。
df = df[df[['col_1','col_2']].apply(lambda x: f(*x), axis=1)]
ここで、fは、col_1とcol_2の要素(x1、x2)のすべてのペアに適用される関数で、必要な条件(x1、x2)に応じてTrueまたはFalseを返します。
pandas 0.1 から開始します。これが最も効率的な方法です。
df.query('Gender=="Male" & Year=="2014" ')