Python 판다를 사용한 모든 복제품 목록은 어떻게 얻을 수 있나요?
수출에 문제가 있을 것 같은 품목 목록을 가지고 있습니다.중복된 아이템의 리스트를 입수하여 수작업으로 비교하고 싶습니다.판다 복제 방법을 사용하려고 하면 첫 번째 복제만 반환됩니다.첫 번째 것뿐만 아니라 모든 사본을 구할 수 있는 방법이 있나요?
데이터 세트의 작은 섹션은 다음과 같습니다.
ID,ENROLLMENT_DATE,TRAINER_MANAGING,TRAINER_OPERATOR,FIRST_VISIT_DATE
1536D,12-Feb-12,"06DA1B3-Lebanon NH",,15-Feb-12
F15D,18-May-12,"06405B2-Lebanon NH",,25-Jul-12
8096,8-Aug-12,"0643D38-Hanover NH","0643D38-Hanover NH",25-Jun-12
A036,1-Apr-12,"06CB8CF-Hanover NH","06CB8CF-Hanover NH",9-Aug-12
8944,19-Feb-12,"06D26AD-Hanover NH",,4-Feb-12
1004E,8-Jun-12,"06388B2-Lebanon NH",,24-Dec-11
11795,3-Jul-12,"0649597-White River VT","0649597-White River VT",30-Mar-12
30D7,11-Nov-12,"06D95A3-Hanover NH","06D95A3-Hanover NH",30-Nov-11
3AE2,21-Feb-12,"06405B2-Lebanon NH",,26-Oct-12
B0FE,17-Feb-12,"06D1B9D-Hartland VT",,16-Feb-12
127A1,11-Dec-11,"064456E-Hanover NH","064456E-Hanover NH",11-Nov-12
161FF,20-Feb-12,"0643D38-Hanover NH","0643D38-Hanover NH",3-Jul-12
A036,30-Nov-11,"063B208-Randolph VT","063B208-Randolph VT",
475B,25-Sep-12,"06D26AD-Hanover NH",,5-Nov-12
151A3,7-Mar-12,"06388B2-Lebanon NH",,16-Nov-12
CA62,3-Jan-12,,,
D31B,18-Dec-11,"06405B2-Lebanon NH",,9-Jan-12
20F5,8-Jul-12,"0669C50-Randolph VT",,3-Feb-12
8096,19-Dec-11,"0649597-White River VT","0649597-White River VT",9-Apr-12
14E48,1-Aug-12,"06D3206-Hanover NH",,
177F8,20-Aug-12,"063B208-Randolph VT","063B208-Randolph VT",5-May-12
553E,11-Oct-12,"06D95A3-Hanover NH","06D95A3-Hanover NH",8-Mar-12
12D5F,18-Jul-12,"0649597-White River VT","0649597-White River VT",2-Nov-12
C6DC,13-Apr-12,"06388B2-Lebanon NH",,
11795,27-Feb-12,"0643D38-Hanover NH","0643D38-Hanover NH",19-Jun-12
17B43,11-Aug-12,,,22-Oct-12
A036,11-Aug-12,"06D3206-Hanover NH",,19-Jun-12
현재 코드는 다음과 같습니다.
df_bigdata_duplicates = df_bigdata[df_bigdata.duplicated(cols='ID')]
중복되는 항목이 몇 개 있습니다.하지만 위의 코드를 사용하면 첫 번째 항목만 나옵니다.API 레퍼런스에서 어떻게 하면 마지막 아이템을 얻을 수 있는지 알 수 있지만, 왜 차이가 나는지 육안으로 확인할 수 있도록 모든 아이템을 가지고 싶습니다.따라서 이 예에서는 첫 번째 엔트리가 아닌 3개의 A036 엔트리와 11795 엔트리와 기타 중복된 엔트리를 모두 가져옵니다.어떤 도움이라도 감사히 받겠습니다.
방법 #1: ID가 중복된 ID 중 하나인 모든 행을 인쇄합니다.
>>> import pandas as pd
>>> df = pd.read_csv("dup.csv")
>>> ids = df["ID"]
>>> df[ids.isin(ids[ids.duplicated()])].sort_values("ID")
ID ENROLLMENT_DATE TRAINER_MANAGING TRAINER_OPERATOR FIRST_VISIT_DATE
24 11795 27-Feb-12 0643D38-Hanover NH 0643D38-Hanover NH 19-Jun-12
6 11795 3-Jul-12 0649597-White River VT 0649597-White River VT 30-Mar-12
18 8096 19-Dec-11 0649597-White River VT 0649597-White River VT 9-Apr-12
2 8096 8-Aug-12 0643D38-Hanover NH 0643D38-Hanover NH 25-Jun-12
12 A036 30-Nov-11 063B208-Randolph VT 063B208-Randolph VT NaN
3 A036 1-Apr-12 06CB8CF-Hanover NH 06CB8CF-Hanover NH 9-Aug-12
26 A036 11-Aug-12 06D3206-Hanover NH NaN 19-Jun-12
이런 일이 반복되지 않도록 하는 좋은 방법이 생각나지 않았다.ids
몇 번이고.방법 #2를 선호합니다.groupby
아이디로.
>>> pd.concat(g for _, g in df.groupby("ID") if len(g) > 1)
ID ENROLLMENT_DATE TRAINER_MANAGING TRAINER_OPERATOR FIRST_VISIT_DATE
6 11795 3-Jul-12 0649597-White River VT 0649597-White River VT 30-Mar-12
24 11795 27-Feb-12 0643D38-Hanover NH 0643D38-Hanover NH 19-Jun-12
2 8096 8-Aug-12 0643D38-Hanover NH 0643D38-Hanover NH 25-Jun-12
18 8096 19-Dec-11 0649597-White River VT 0649597-White River VT 9-Apr-12
3 A036 1-Apr-12 06CB8CF-Hanover NH 06CB8CF-Hanover NH 9-Aug-12
12 A036 30-Nov-11 063B208-Randolph VT 063B208-Randolph VT NaN
26 A036 11-Aug-12 06D3206-Hanover NH NaN 19-Jun-12
Panda 버전 0.17에서는 중복 기능에서 'keep = False'를 설정하여 모든 중복 항목을 가져올 수 있습니다.
In [1]: import pandas as pd
In [2]: df = pd.DataFrame(['a','b','c','d','a','b'])
In [3]: df
Out[3]:
0
0 a
1 b
2 c
3 d
4 a
5 b
In [4]: df[df.duplicated(keep=False)]
Out[4]:
0
0 a
1 b
4 a
5 b
df[df.duplicated(['ID'], keep=False)]
중복된 행이 모두 반환됩니다.
설명서에 따르면:
keep
: {'first', 'last', False, 기본값 'first'
- 'first' : 첫 번째 항목을 제외하고 True로 중복 표시합니다.
- 'last' : 마지막 오카렌스를 제외하고 중복되는 True로 표시합니다.
- False : 중복되는 모든 것을 True로 표시합니다.
코멘트는 할 수 없기 때문에, 별도 회답으로 투고합니다.
두 개 이상의 열을 기준으로 중복 항목을 찾으려면 다음과 같이 모든 열 이름을 언급하면 중복된 행 세트가 모두 반환됩니다.
df[df[['product_uid', 'product_title', 'user']].duplicated() == True]
또,
df[df[['product_uid', 'product_title', 'user']].duplicated()]
df[df['ID'].duplicated() == True]
이건 내게 효과가 있었다.
sort("ID")
현재 동작하지 않는 것 같습니다.소트 문서에 따라 권장되지 않는 것 같기 때문에,sort_values("ID")
대신 다음과 같이 중복 필터 다음에 정렬합니다.
df[df.ID.duplicated(keep=False)].sort_values("ID")
이것은 질문에 대한 해결책은 아니지만 예를 들어 설명하겠습니다.
import pandas as pd
df = pd.DataFrame({
'A': [1,1,3,4],
'B': [2,2,5,6],
'C': [3,4,7,6],
})
print(df)
df.duplicated(keep=False)
df.duplicated(['A','B'], keep=False)
출력:
A B C
0 1 2 3
1 1 2 4
2 3 5 7
3 4 6 6
0 False
1 False
2 False
3 False
dtype: bool
0 True
1 True
2 False
3 False
dtype: bool
요소별 논리 또는 panders 중복 메서드의 take_last 인수를 True와 False로 설정하면 중복된 모든 것을 포함하는 집합을 데이터 프레임에서 얻을 수 있습니다.
df_bigdata_duplicates =
df_bigdata[df_bigdata.duplicated(cols='ID', take_last=False) |
df_bigdata.duplicated(cols='ID', take_last=True)
]
다음을 사용할 수 있습니다.
df[df.duplicated(['ID'])==True].sort_values('ID')
모든 열 값에 대한 중복 행 및 인덱스 loc #
def dup_rows_index(df):
dup = df[df.duplicated()]
print('Duplicated index loc:',dup[dup == True ].index.tolist())
return dup
데이터베이스용.duplicated(keep=False)
열이 정렬될 때까지 작동하지 않았습니다.
data.sort_values(by=['Order ID'], inplace=True)
df = data[data['Order ID'].duplicated(keep=False)]
위의 솔루션에서 영감을 받아 값을 더 정렬하여 중복된 레코드를 볼 수 있습니다.
df[df.duplicated(['ID'], keep=False)].sort_values(by='ID')
이 코드는 행에 데이터 프레임에 반복이 있는지 여부를 나타내는 데이터 프레임을 제공합니다.
df2 = df1.duplicated()
이 코드를 사용하면 중복이 제거되고 인스턴스가 1개만 유지됩니다.
df3 = df1.drop_duplicates(keep="first")
df3
고유한 항목(행)으로 구성된 데이터 프레임이 됩니다.
언급URL : https://stackoverflow.com/questions/14657241/how-do-i-get-a-list-of-all-the-duplicate-items-using-pandas-in-python
'source' 카테고리의 다른 글
nodejs의 단일 파일에 mysql 데이터베이스 연결을 제공하는 방법 (0) | 2022.09.23 |
---|---|
constructor type 인수가 type 앞에 배치되는 것은 무엇을 의미합니까? (0) | 2022.09.23 |
php 문자열 연결, 성능 (0) | 2022.09.23 |
속성 Javadoc 작성 방법 (0) | 2022.09.23 |
NumPy에서 인덱스 배열을 원핫 인코딩 배열로 변환 (0) | 2022.09.23 |