2016-11-28 1 views
1

데이터 프레임의 단일 열에서 목록으로 데이터를 이동하려고합니다. 클라이언트가 0 %가있는 경우 조건에 따라 데이터 프레임 값을 목록으로 이동

Account Name Renewal % Change 
Client 1  0% 
Client 2  0% 
Client 3  2% 
Client 4  0% 
Client 5  1% 
Client 6  1% 

그래서 그것은 목록 Cost0에 추가 취득해야하며 그것이 비용 1에 추가됩니다해야 1 %를 가지고있다.

pd.series.tolist()를 사용해 보았지만 오류가 발생했습니다.

if brl['Renewal % Change'] == '0%': 
    a = pd.Series(brl['Account Name']) 
    a.tolist() 

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()

+0

지금은 확인할 수 없지만 오류가 발생하는 'if' 문은 아닙니다. r에서? . 목록 1 = brl.loc [BRL [ '갱신 % 변경'] == '0 %', '계정 이름'] tolist() 리스트 2 = brl.loc [BRL의 [: 그런 뭔가를 시도 'Renewal % Change'] == '1 %', 'Account Name']. tolist() – Matek

답변

1

Cost0 = brl[blr['Renewal % Change']=='0%']['Account Name'].tolist() 
Cost1 = brl[blr['Renewal % Change']=='1%']['Account Name'].tolist() 
시도
+0

감사합니다.이 솔루션은 간단하며 원하는 방식으로 작동합니다. –

1

당신은 조금 loc에 의해 열을 선택하여 boolean indexing을 변경 사용할 수 있습니다 알려 주시기 바랍니다 :

mask = brl['Renewal % Change'] == '0%' 
print (mask) 
0  True 
1  True 
2 False 
3  True 
4 False 
5 False 
Name: Renewal % Change, dtype: bool 

print (brl.loc[mask, 'Account Name'].tolist()) 
['Client 1', 'Client 2', 'Client 4'] 

을 모두 함께 :

Cost0 = brl.loc[brl['Renewal % Change'] == '0%', 'Account Name'].tolist() 
print (Cost0) 
['Client 1', 'Client 2', 'Client 4'] 

Cost1 = brl.loc[brl['Renewal % Change'] == '1%', 'Account Name'].tolist() 
print (Cost1) 
['Client 5', 'Client 6'] 

배열이 아닌 스칼라 값, docs 참조 - 반환 부울 ​​ Series을 비교하기 때문에

당신은, 오류가 발생합니다 :

print (brl['Renewal % Change'] == '0%') 
0  True 
1  True 
2 False 
3  True 
4 False 
5 False 
Name: Renewal % Change, dtype: bool 

비교 솔루션 - loc가 빠르다과 :

In [137]: %timeit brl.loc[brl['Renewal % Change'] == '0%', 'Account Name'].tolist() 
1000 loops, best of 3: 536 µs per loop 

In [138]: %timeit brl[brl['Renewal % Change']=='0%']['Account Name'].tolist() 
1000 loops, best of 3: 657 µs per loop 
+0

감사합니다. 제 2의 솔루션이 잘 작동하고 오류에 대한 이유를 제시했습니다. 따라서 판다 데이터 프레임의 IF 조건은 잘 작동하지 않습니다. –

+0

정확하게, pandas가 희귀하게 사용된다면,'Series','DataFrames','Panels'은 배열을 사용하기 때문에 희귀합니다. – jezrael

+0

예, 해결책은 하나만 허용됩니다. – jezrael

관련 문제