시리즈물을 필터링하는 방법
저는 다른 열에서 groupby('name')와 mean() 함수를 사용한 후 이와 같은 시리즈를 가지고 있습니다.
name
383 3.000000
663 1.000000
726 1.000000
737 9.000000
833 8.166667
평균 값이 1.000000인 행을 필터링하는 방법을 보여주실 수 있나요?당신의 도움에 감사드리며 대단히 감사합니다.
In [5]:
import pandas as pd
test = {
383: 3.000000,
663: 1.000000,
726: 1.000000,
737: 9.000000,
833: 8.166667
}
s = pd.Series(test)
s = s[s != 1]
s
Out[0]:
383 3.000000
737 9.000000
833 8.166667
dtype: float64
판다 버전 0.18+에서 시리즈 필터링도 아래와 같이 수행할 수 있습니다.
test = {
383: 3.000000,
663: 1.000000,
726: 1.000000,
737: 9.000000,
833: 8.166667
}
pd.Series(test).where(lambda x : x!=1).dropna()
체크아웃: http://pandas.pydata.org/pandas-docs/version/0.18.1/whatsnew.html#method-chaininng-improvements
DACW가 지적했듯이, 판다 0.18.1에서는 여러분이 찾고 있는 것을 매우 멋지게 수행하는 방법 체인 개선이 있습니다.
사용하기 보다는.where
당신은 당신의 기능을 다음 중 하나로 전달할 수 있습니다..loc
인덱서[]
전화를 피하는 것이 좋습니다..dropna
:
test = pd.Series({
383: 3.000000,
663: 1.000000,
726: 1.000000,
737: 9.000000,
833: 8.166667
})
test.loc[lambda x : x!=1]
test[lambda x: x!=1]
DataFrame 및 NDFrame 클래스에서도 유사한 동작이 지원됩니다.
빠른 은 를위빠방다법은사음것재입는다니구하성용여하이을한른▁usingruct▁a다를 사용하여 재구성하는 입니다.numpy
기본 배열을 슬라이스합니다.아래 시간을 참조하십시오.
mask = s.values != 1
pd.Series(s.values[mask], s.index[mask])
0
383 3.000000
737 9.000000
833 8.166667
dtype: float64
순진한 타이밍
다른 방법은 먼저 DataFrame으로 변환하고 쿼리 방법을 사용하는 것입니다(numexpr이 설치되어 있다고 가정).
import pandas as pd
test = {
383: 3.000000,
663: 1.000000,
726: 1.000000,
737: 9.000000,
833: 8.166667
}
s = pd.Series(test)
s.to_frame(name='x').query("x != 1")
작업을 을,▁use다▁▁also를 사용할 수도 있습니다.compress
함수:
test = pd.Series({
383: 3.000000,
663: 1.000000,
726: 1.000000,
737: 9.000000,
833: 8.166667
})
test.compress(lambda x: x != 1)
# 383 3.000000
# 737 9.000000
# 833 8.166667
# dtype: float64
저의 경우, 저는 캐릭터의 튜플 값을 가진 판다 시리즈를 가지고 있었습니다.
Out[67]
0 (H, H, H, H)
1 (H, H, H, T)
2 (H, H, T, H)
3 (H, H, T, T)
4 (H, T, H, H)
따라서 인덱싱을 사용하여 시리즈를 필터링할 수 있지만 필요한 인덱스를 생성할 수 있습니다.apply
제 조건은 "정확히 하나의 'H'를 가진 모든 튜플 찾기"입니다.
series_of_tuples[series_of_tuples.apply(lambda x: x.count('H')==1)]
나는 그것이 "사슬에 묶일 수" 없다는 것을 인정합니다. (즉, 반복합니다.)series_of_tuples
변수에 적용(...)을 호출할 수 있도록 임시 영상 시리즈를 변수에 저장해야 합니다.
다른 방법도 있을 수 있습니다(그 외에도)..apply(...)
요소별로 작동하여 부울 인덱스를 생성할 수 있습니다.
다음과 같은 체인 가능한 기능을 사용하는 다른 많은 답변(승인된 답변 포함):
.compress()
.where()
.loc[]
[]
이들은 시리즈의 개별 값이 아닌 시리즈에 적용되는 호출부(람다)를 허용합니다!
따라서 내 튜플 시리즈는 위의 조건 / 호출 가능 / 람다를 사용하려고 할 때 다음과 같은 체인 가능 함수는 다음과 같습니다..loc[]
:
series_of_tuples.loc[lambda x: x.count('H')==1]
다음 오류가 발생합니다.
키 오류: '레벨 H는 이름(없음)과 같아야 합니다.'
저는 매우 혼란스러웠지만, Series.count 기능을 사용하고 있는 것 같은데, 이것은 제가 원했던 것이 아닙니다.
저는 대체 데이터 구조가 더 나을 수 있다는 것을 인정합니다.
- 범주 데이터 유형?
- 데이터 프레임(투플의 각 요소가 열이 됨)
- 일련의 문자열(튜플을 연결하기만 하면 됨):
이는 일련의 문자열을 생성합니다(즉, 튜플을 연결하고 단일 문자열에 튜플의 문자를 결합함).
series_of_tuples.apply(''.join)
그럼 체인블을 사용할 수 있습니다.
series_of_tuples.apply(''.join).str.count('H')==1
언급URL : https://stackoverflow.com/questions/28272137/pandas-how-to-filter-a-series
'programing' 카테고리의 다른 글
파이썬 스크립트에서 파이썬패스를 설정하려면 어떻게 해야 합니까? (0) | 2023.07.18 |
---|---|
PyTorch에서 선호하는 텐서 복사 방법 (0) | 2023.07.18 |
원격 분기에서 소수의 커밋을 영구적으로 제거하는 방법 (0) | 2023.07.18 |
도커 - 빌드 단계에서 MySQL/MariaDB 루트 암호를 안전하게 설정합니다. (0) | 2023.07.18 |
데이터베이스 처리량이란 무엇입니까? (0) | 2023.07.18 |