특정 열 값의 모든 조합에 대해 다른 열에 동일한 요소를 포함하는 데이터 프레임에 행 유지

해피 파이
df = pd.DataFrame({'a':['x','x','x','x','x','y','y','y','y','y'],'b':['z','z','z','w','w','z','z','w','w','w'],'c':['c1','c2','c3','c1','c3','c1','c3','c1','c2','c3'],'d':range(1,11)})

   a  b   c   d
0  x  z  c1   1
1  x  z  c2   2
2  x  z  c3   3
3  x  w  c1   4
4  x  w  c3   5
5  y  z  c1   6
6  y  z  c3   7
7  y  w  c1   8
8  y  w  c2   9
9  y  w  c3  10

a및의 모든 조합에 b대해 동일한 값을 포함하는 행만 유지하려면 어떻게해야 c합니까? 즉, c일부 ab? 조합에만 있는 값이있는 행을 제외하는 방법 입니다 .

예를 들어, 전용 c1c3모든 조합에 존재 a하고 b( [x,z], [x,w], [y,z], [y,w])이므로 출력 될

   a  b   c   d
0  x  z  c1   1
2  x  z  c3   3
3  x  w  c1   4
4  x  w  c3   5
5  y  z  c1   6
6  y  z  c3   7
7  y  w  c1   8
9  y  w  c3  10
Anky

한 가지 방법이 있습니다. 그룹마다 고유의 목록을 가져 오기 한 후 사용하여 모든 반환 된 배열에서 공통 요소를 확인 reduce하고 np.intersect1d. 이어서 사용 dataframe 필터링 series.isinboolean indexing

from functools import reduce
out = df[df['c'].isin(reduce(np.intersect1d,df.groupby(['a','b'])['c'].unique()))]

고장:

s = df.groupby(['a','b'])['c'].unique()
common_elements = reduce(np.intersect1d,s)
#Returns :-> array(['c1', 'c3'], dtype=object)

out = df[df['c'].isin(common_elements )]#.copy()

   a  b   c   d
0  x  z  c1   1
2  x  z  c3   3
3  x  w  c1   4
4  x  w  c3   5
5  y  z  c1   6
6  y  z  c3   7
7  y  w  c1   8
9  y  w  c3  10

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관