2017-11-15 8 views
1

내가 이런 DataFrame이 값 :파이썬/팬더 컬럼의 값이 다른 열을 기준으로 동일한 경우 확인이

 product_id   dt products_qty stock_qty 
0   8225 2017-10-16   12.000 13.000 
1   8280 2017-10-16   0.000  11.000 
2   8225 2017-10-17   0.000  41.000 
3   8280 2017-10-17   7.134  64.698 
4   8225 2017-10-18   1.000  8.000 
5   8280 2017-10-18   2.728  27.417 
6   8225 2017-10-19   0.000  41.000 
7   8280 2017-10-19   1.000  -2.000 
8   8225 2017-10-20   2.000  -7.000 
9   8280 2017-10-20   1.000  25.000 
10   8225 2017-10-21   0.000  41.000 
11   8280 2017-10-21   0.000  11.000 

내가 products_qty는 0 stock_qty 값이 동일 동일 모든 행을 얻을 수 있습니다. 그래서이 경우 DataFrame은 다음과 같이 나타납니다.

  product_id   dt products_qty stock_qty 
    0   8280 2017-10-16   0.000  11.000 
    2   8225 2017-10-17   0.000  41.000 
    6   8225 2017-10-19   0.000  41.000 
    10   8225 2017-10-21   0.000  41.000 
    11   8280 2017-10-21   0.000  11.000 

감사합니다. 연쇄 조건

+0

, 오른쪽'0' 만 값에 중복을 확인해야합니까? – jezrael

답변

0

사용 boolean indexing - 검사에 대한 매개 변수 keep=Falseduplicated에 의한 초 모든 중복 :

print (df) 
    product_id   dt products_qty stock_qty 
0  2948225 2017-10-16  12.000  13.000 
1  2948280 2017-10-16   0.000  11.000 
2  2948225 2017-10-17   0.000  41.000 
3  2948280 2017-10-17   7.134  64.698 
4  2948225 2017-10-18   1.000  8.000 
5  2948280 2017-10-18   2.728  27.417 
6  2948225 2017-10-19   0.000  41.000 
7  2948280 2017-10-19   1.000  -2.000 
8  2948225 2017-10-20   2.000  -7.000 
9  2948280 2017-10-20   1.000  25.000 
10  2948225 2017-10-21   0.000  13.000 <- changed to 13 
11  2948280 2017-10-21   0.000  11.000 

#if need check duplicates in all column data 
df1 = df[(df['products_qty'] == 0) & (df['stock_qty'].duplicated(keep=False))] 
print (df1) 
    product_id   dt products_qty stock_qty 
1  2948280 2017-10-16   0.0  11.0 
2  2948225 2017-10-17   0.0  41.0 
6  2948225 2017-10-19   0.0  41.0 
10  2948225 2017-10-21   0.0  13.0 <- because dupe with first row 
11  2948280 2017-10-21   0.0  11.0 

#if need check only duplicates in rows with 0 in products_qty 

df2 = (df[df.loc[df['products_qty'] == 0, 'stock_qty'] 
      .duplicated(keep=False).reindex(df.index, fill_value=False)]) 
print (df2) 
    product_id   dt products_qty stock_qty 
1  2948280 2017-10-16   0.0  11.0 
2  2948225 2017-10-17   0.0  41.0 
6  2948225 2017-10-19   0.0  41.0 
11  2948280 2017-10-21   0.0  11.0 

df2 = df[df['products_qty'] == 0] 
df2 = df2[df2['stock_qty'].duplicated(keep=False)] 
print (df2) 
    product_id   dt products_qty stock_qty 
1  2948280 2017-10-16   0.0  11.0 
2  2948225 2017-10-17   0.0  41.0 
6  2948225 2017-10-19   0.0  41.0 
11  2948280 2017-10-21   0.0  11.0