2013-02-02 2 views
2

데이터 프레임의 동일한 튜플에서 다른 값을 기반으로 특정 값을 선택하는 방법을 찾으려고했습니다. 내가 데이터를 슬라이스 할 수있는 몇 가지 방법을 시도했습니다팬더 데이터 프레임에서 2 개 이상의 다른 값을 기반으로 특정 값을 선택하는 방법

Select ServicerPropId from dataframe 
where DealID = 'BAC98765' and ServicerId = '30220144' 

: 데이터 (현재 dataframe에서 복사) SQL의 측면에서

DealID  PropId LoanId ServicerId ServicerPropId 
0 BAC98765  15 000015 30220144  010-002-001 
1 BAC98765  16 000016 30220092  010-003-001 
2 BAC98765  45 000045 30220155  010-045-001 
3 BAC98765  48 000048 30220157  010-048-001 

은 내가 무엇을 달성하고자하는 것은 이것이다 다음과 같습니다 그러나 여러 선택 기준을 사용하여 변수에 하나의 값만 반환하는 방법을 알아낼 수는 없습니다. map를 사용

답변

2
columns = ['DealID', 'PropId', 'LoanId', 'ServicerId', 'ServicerPropId'] 

d = [('A', [ 'BAC98765', '15', '000015', '30220144', '010-002-001']), 
    ('B', [ 'BAC98765', '16', '000016', '30220092', '010-003-001']), 
    ('C', [ 'BAC98765', '45', '000045', '30220155', '010-045-001']), 
    ('D', [ 'BAC98765', '48', '000048', '30220157', '010-048-001']),] 

D = pandas.DataFrame.from_items(d, orient='index', columns=columns) 

criterion1 = D['DealID'].map(lambda x: x == 'BAC98765') 
criterion2 = D['ServicerId'].map(lambda x: x == '30220144') 

res = D[criterion1 & criterion2]['ServicerPropId'] 

을 제공

res = D[(D['DealID'] == "BAC98765") & (D["ServicerId"] == "30220144")]['ServicerPropId'] 

(DSM로 의견에서 지적한대로) 당신이 더 간단하게 할 수있다이 경우에, 원하는 조건에 넣을 수 있습니다

In [35]: print res 
A 010-002-001 
Name: ServicerPropId 

In [36]: type(res) 
Out[36]: pandas.core.series.Series 

(doc)

+5

나는지도가 필요하다고 생각하지 않는다. 'D [(D [ 'DealID'] == "BAC98765") & (D [ "ServicerId"] == "30220144")]'일해야합니다. – DSM

+0

잘 작동했는데, 특별한 경우에는 매핑이 필요하지 않지만 코드의 마지막 줄은 내가 찾고있는 코드와 정확히 일치합니다. 감사. –

+0

DSM의 마지막 비 맵 솔루션처럼 나를 위해 일했습니다. – dartdog

관련 문제