groupby ( ‘name’)을 수행하고 다른 열에 mean () 함수를 사용한 후 이와 같은 Series가 있습니다.
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에가.
를 사용하는 대신 인덱서 또는 Series 인덱서에 .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 클래스에서 지원됩니다.
답변
답변
또 다른 방법은 먼저 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")
답변
연결 작업이 마음에 들면 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)]
나는 그것이 “chainable” 이 아니라는 것을 인정합니다 . (즉, series_of_tuples
두 번 반복 합니다. 임시 시리즈를 변수에 저장해야 apply (…)를 호출 할 수 있습니다).
부울 인덱스를 생성하기 위해 요소별로 작동 할 수 있는 다른 메서드 (외에 .apply(...)
) 도있을 수 있습니다 .
다음과 같은 연결 가능한 함수를 사용하는 다른 많은 답변 (수락 된 답변 포함) :
.compress()
.where()
.loc[]
[]
이들은 시리즈 의 개별 값이 아닌 Series에 적용되는 콜 러블 (람다) 을 허용합니다 !
따라서 위의 조건 / 호출 가능 / 람다를 다음과 같은 체인 가능한 함수와 함께 사용하려고 할 때 내 튜플 시리즈가 이상하게 작동했습니다 .loc[]
.
series_of_tuples.loc[lambda x: x.count('H')==1]
오류를 생성합니다.
KeyError : ‘레벨 H는 이름과 동일해야합니다 (없음).’
나는 매우 혼란 스러웠지만series_of_tuples.count(...)
내가 원하는 것이 아닌 Series.count 함수를 사용하는 것 같습니다 .
대체 데이터 구조가 더 좋을 수 있음을 인정합니다.
- 카테고리 데이터 유형?
- Dataframe (튜플의 각 요소가 열이 됨)
- 일련의 문자열 (튜플을 함께 연결) :
이것은 일련의 문자열을 생성합니다.
series_of_tuples.apply(''.join)
그래서 체인 블 을 사용할 수 있습니다.Series.str.count
series_of_tuples.apply(''.join).str.count('H')==1