2016-08-16 2 views
-3

데이터 프레임을 소개하는 다음 상황을 간단히 처리 할 수 ​​있습니다. 루프에서 선택하고 하위 프레임을 포함하는 새 데이터 프레임을 만듭니다. 조건을 만족 이전 :Python pandas 알 수없는 매개 변수 개수의 행 선택

import pandas as pd 
import intertools 
g = ['M', 'M', 'F', 'F'] 
a = [20, 33, 20, 50] 
Zip = [21202, 21018, 21202, 22222] 
d = [0, -3, 8] 

parameters = (g, a) 
names = ['gender', 'age'] 

df = pd.DataFrame({'age':a, 'gender':g, 'd':d, 'Zip':Zip}) 

for values in itertools.product(*parameters): 
    thesevalues = ((df[names[0]] == values[0]) & (df[names[1]] == values[1]])) 
    subdf = df[thesevalues] 

가 잘 작동하지만 나 또한 이름을 가진 매개 변수의 우편 번호를 포함 할 경우 어떻게. 또한 "이 값"에 세 번째 선택 기준을 수동으로 도입해야합니다. 아마도이 기준에서 원하는 매개 변수 목록을 매개 변수 목록에 적용 할 수있는 기능을 간과 할 것입니다. 루프가 나쁜 선택처럼 보입니다 ... 다른 방법이 있습니까? 감사!

+0

코드는 정말 의미가 없습니다 ... 모든 조합에 반복하여 모든 dataframe을 ... –

+0

코드는 작동하지 않습니다. – ayhan

+0

그래, 코드가 작동하고 이것은 예제로서 단지 작은 샘플입니다. 실제로 많은 매개 변수가 매개 변수의 한 조합으로 선택되고 선택의 일부가 아닌 하나의 열을 추가해야합니다. – Marcel

답변

0

IIUC 당신이 numpy.logical_and이 필요합니다 : 당신이 부분 집합 때문에

parameters = (g, a, Zip) 
names = ['gender', 'age', 'Zip'] 

df = pd.DataFrame({'age':a, 'gender':g, 'd':d, 'Zip':Zip}) 
print (df) 

for values in product(*parameters): 
    #http://stackoverflow.com/a/20528566/2901002 
    thesevalues = np.logical_and.reduce([df[names[x]] == values[x] for x in range(len(parameters))]) 
    subdf = df[thesevalues] 
    print (subdf) 
관련 문제