developer tip

pandas 데이터 프레임을 여러 열로 필터링하는 방법

optionbox 2020. 10. 12. 07:28
반응형

pandas 데이터 프레임을 여러 열로 필터링하는 방법


단일 열로 데이터 프레임 (df)을 필터링하려면 남성과 여성이 포함 된 데이터를 고려하면 다음을 수행 할 수 있습니다.

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

질문 1-데이터가 여러 해에 걸쳐 있고 2014 년에는 남성 만보고 싶었다면 어떻게됩니까?

다른 언어에서는 다음과 같이 할 수 있습니다.

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

(이 작업을 수행하고 새 데이터 프레임 개체에서 원래 데이터 프레임의 하위 집합을 가져오고 싶습니다 제외)

질문 2. 루프에서이 작업을 수행하고 각 고유 한 연도 및 성별 집합에 대한 데이터 프레임 개체를 생성하는 방법 (예 : 2013- 남성, 2013- 여성, 2014- 남성 및 2014- 여성에 대한 df)

for y in year:

for g in gender:

df = .....

&연산자를 사용 하여 하위 문을 ()다음 으로 래핑하는 것을 잊지 마십시오 .

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

dictfor 루프를 사용 하여 데이터 프레임을 저장하려면 :

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.13 부터 시작합니다 . 이것이 가장 효율적인 방법입니다.

df.query('Gender=="Male" & Year=="2014" ')

np.logical_and대체 &(또는 np.logical_or대체 |) 연산자를 사용하여 여러 열 (3 개 이상)로 필터링 할 수 있습니다.

다음은 여러 필드에 대상 값을 제공하는 경우 작업을 수행하는 함수의 예입니다. 다양한 유형의 필터링 및 기타 사항에 맞게 조정할 수 있습니다.

def filter_df(df, filter_values):
    """Filter df by matching targets for multiple columns.

    Args:
        df (pd.DataFrame): dataframe
        filter_values (None or dict): Dictionary of the form:
                `{<field>: <target_values_list>}`
            used to filter columns data.
    """
    import numpy as np
    if filter_values is None or not filter_values:
        return df
    return df[
        np.logical_and.reduce([
            df[column].isin(target_values) 
            for column, target_values in filter_values.items()
        ])
    ]

용법:

df = pd.DataFrame({'a': [1, 2, 3, 4], 'b': [1, 2, 3, 4]})

filter_df(df, {
    'a': [1, 2, 3],
    'b': [1, 2, 4]
})

참고 URL : https://stackoverflow.com/questions/22086116/how-do-you-filter-pandas-dataframes-by-multiple-columns

반응형