2017-05-16 10 views
2

제목에 대해 죄송합니다.이 문제를 간략하게 &에 기술 한 것을 생각해 낼 수 없었습니다.목록의 변수/동적 개수 값을 사용하는 부울 인덱싱에 대한 우아한 방법

는 같은 dataframe을 말해봐 :

    Time   Temp  RH  Sensor Unit 
0  2015-12-07 00:06:00 14.912000 42.324  A  1  
1  2015-12-07 00:12:00 14.768000 42.371  A  2  
2  2015-12-07 00:18:00 14.601000 42.415  A  1 
3  2015-12-07 00:24:00 14.457000 42.462  A  4 
... 

그리고 당신은 Unit 열을 기준으로 이러한 데이터를 부분 집합하고자합니다.

subset = df[df['Unit'] == 4] 

을 ... 그리고 여러으로 서브 세트 Unit 값을 원한다면 당신은 할 수 있습니다 : 당신이 Unit 당신이 하위 집합을 만드는 데 사용하도록하려는 경우 당신은 할 수

subset = df[(df['Unit'] == 4) | (df['Unit'] == 1)] 

문제를 나는 for 루프를 사용하여 이러한 작업을 수행하고 Unit 수의 변경 사항 (값 목록의 길이는 1-3까지 다양 함)이 포함되어 있습니다. 그것은 여러 값의 목록이 때 물론

for i in Unit: 
    subset = df[(df['Unit'] == i] 
    ... 

는, 위에서 i는 그을음 값으로 사용할 수는 있지만,하지 않습니다 즉, 상상 Unit 내가 통해 반복하고 목록의 목록입니다. if 성명을 사용하지 않고이를 수행 할 수있는 방법이 있습니까?

답변

3

, 당신은 것을 사용하려고 시도하다 조건 목록에 대한 부울 인덱스? 예를 들어, 아래 Dataframe 참조 :

df 
     a 
0  12 
1 65346 
2 1243 
3  63 
4 568 
5 243 

을 당신은 조건 목록에 인덱스 싶습니다

conditions = [12, 568] 

당신은 시리즈의 방법을 사용할 수 있습니다 isin()

df[df['a'].isin(conditions)] 

    a 
0 12 
4 568 
+1

감사합니다 앤드류! 이것은 내가 필요한 것입니다. – jtam

2

설정

df 
Out[2350]: 
        Time Temp  RH Sensor Unit 
0 2015-12-07 00:06:00 14.912 42.324  A  1 
1 2015-12-07 00:12:00 14.768 42.371  A  2 
2 2015-12-07 00:18:00 14.601 42.415  A  1 
3 2015-12-07 00:24:00 14.457 42.462  A  4 

솔루션

#use np.in1d to match multiple Unit values. 
df[np.in1d(df.Unit,[1,2])] 
Out[2351]: 
        Time Temp  RH Sensor Unit 
0 2015-12-07 00:06:00 14.912 42.324  A  1 
1 2015-12-07 00:12:00 14.768 42.371  A  2 
2 2015-12-07 00:18:00 14.601 42.415  A  1 

그런 다음 단위 값 목록과 사용을 구축 할 수 있습니다 : 만약 내가 제대로 이해하고

df[np.in1d(df.Unit,your_unit_value_list)] 
+0

감사합니다. Allen! 이것은 좋은 해결책 이었지만 Andrew L과 DYZ 솔루션은 좀 더 우아하다고 생각합니다. – jtam

+0

@ user2970409,이 솔루션이 가장 빠른 것 같습니다 – MaxU

2
subset = df[df['Unit'].isin([1,2])] 
#     Time Temp  RH Sensor Unit 
#0 2015-12-07 00:06:00 14.912 42.324  A  1 
#1 2015-12-07 00:12:00 14.768 42.371  A  2 
#2 2015-12-07 00:18:00 14.601 42.415  A  1 
+0

도움 주셔서 감사합니다 DYZ! – jtam

1

한 번 더 옵션 :

In [15]: x 
Out[15]: 
        Time Temp  RH Sensor Unit 
0 2015-12-07 00:06:00 14.912 42.324  A  1 
1 2015-12-07 00:12:00 14.768 42.371  A  2 
2 2015-12-07 00:18:00 14.601 42.415  A  1 
3 2015-12-07 00:24:00 14.457 42.462  A  4 

In [16]: units = [1,2] 

In [17]: x.query("Unit in @units") 
Out[17]: 
        Time Temp  RH Sensor Unit 
0 2015-12-07 00:06:00 14.912 42.324  A  1 
1 2015-12-07 00:12:00 14.768 42.371  A  2 
2 2015-12-07 00:18:00 14.601 42.415  A  1