[데이터 사이언스/문법] df[df[ ]] 과 df[ ]의 차이가 무엇일까?

2024. 8. 17. 19:48데이터 사이언스

 

 

df['Ticker'] == Ticker는
'Ticker' 열에서 주어진 Ticker와 일치하는 값들을 찾는 boolean 시리즈를 생성합니다.

df[df['Ticker'] == Ticker]는
이 boolean 시리즈를 사용하여 일치하는 행을 필터링한 새로운 데이터프레임을 생성합니다.


이렇게 필터링된 데이터프레임을 사용하여 주어진 Ticker에 해당하는 주식의 인덱스를 찾고,
k-NN 모델을 사용하여 가장 유사한 주식을 추천할 수 있습니다.

 

 

df['Ticker'] == Ticker: 비교 연산

  • df['Ticker'] == Ticker는 데이터프레임 df의 'Ticker' 열과 주어진 Ticker 값을 비교하는 연산입니다.
  • 이 연산의 결과는 동일한 길이의 boolean 시리즈로, 각 요소는 해당 행의 'Ticker' 값이 주어진 Ticker 값과 같은지 여부를 나타냅니다.
  • 예를 들어, Ticker가 "AAPL"일 때, 결과는 다음과 같습니다
0     True
1    False
2    False
3    False
4    False
5    False
Name: Ticker, dtype: bool

df[df['Ticker'] == Ticker]:행 선택

  • df[df['Ticker'] == Ticker]는 boolean 시리즈 df['Ticker'] == Ticker를 사용하여 데이터프레임 df에서 조건을 만족하는 행을 선택합니다.
  • 결과는 조건을 만족하는 행들로 이루어진 데이터프레임입니다.
  • 예를 들어, Ticker가 "AAPL"일 때, 결과는 다음과 같습니다:
   Ticker industry sector   marketCap  beta
0   AAPL     tech     IT  1.200000e12   1.2

원본 데이터

import pandas as pd

df = pd.DataFrame({
    'Ticker': ['AAPL', 'MSFT', 'GOOGL', 'AMZN', 'FB', 'TSLA'],
    'industry': ['tech', 'tech', 'tech', 'tech', 'tech', 'auto'],
    'sector': ['IT', 'IT', 'IT', 'IT', 'IT', 'Auto'],
    'marketCap': [1.2e12, 1.1e12, 9.5e11, 8.5e11, 7.5e11, 6.0e11],
    'beta': [1.2, 1.1, 1.0, 1.3, 1.5, 2.0]
})

 

df['Ticker'] == Ticker의 결과
Ticker = 'AAPL'
mask = df['Ticker'] == Ticker
print(mask)
  • 출력
0     True
1    False
2    False
3    False
4    False
5    False
Name: Ticker, dtype: bool
df[df['Ticker'] == Ticker]의 결과
filtered_df = df[df['Ticker'] == Ticker]
print(filtered_df)
  • 출력
  Ticker industry sector   marketCap  beta
0   AAPL     tech     IT  1.200000e12   1.2

함수 코드 설명

def recommend_stocks(Ticker):
    # 주어진 Ticker에 해당하는 주식의 index를 반환
    stock_index = df[df['Ticker'] == Ticker].index[0]

    # 주어진 stock의 knn 모델에 대한 최근접 이웃 indices를 호출
    neighbor_indices = knn.kneighbors(df_preprocessed[stock_index].reshape(1, -1), return_distance=False)

    # 최근접 이웃을 호출
    neighbor_tickers = df.iloc[neighbor_indices[0]]

    # input 주식은 제외하고 추천
    recommendations = neighbor_tickers[neighbor_tickers['Ticker'] != Ticker]

    return recommendations

print(recommend_stocks("AAPL"))

각 줄 설명

df[df['Ticker'] == Ticker].index[0]
  • df['Ticker'] == Ticker는 'Ticker' 열에서 주어진 Ticker와 일치하는 값들을 찾습니다.
  • df[df['Ticker'] == Ticker]는 일치하는 행을 필터링하여 새로운 데이터프레임을 만듭니다.
  • .index[0]는 필터링된 데이터프레임의 첫 번째 행의 인덱스를 반환합니다.
  • 예를 들어, Ticker가 'AAPL'이면 stock_index는 0이 됩니다.
knn.kneighbors(df_preprocessed[stock_index].reshape(1, -1), return_distance=False)
  • df_preprocessed[stock_index]는 전처리된 데이터프레임에서 주어진 stock_index에 해당하는 행을 선택합니다.
  • .reshape(1, -1)는 1차원 배열을 2차원 배열로 변환하여 k-NN 모델에 입력할 수 있도록 합니다.
  • knn.kneighbors는 주어진 샘플에 대해 가장 가까운 이웃의 인덱스를 반환합니다.
  • return_distance=False는 이웃 간의 거리 값을 반환하지 않고 인덱스만 반환하도록 설정합니다.
df.iloc[neighbor_indices[0]]
  • neighbor_indices[0]는 최근접 이웃의 인덱스 배열을 나타냅니다.
  • df.iloc는 위치 기반 인덱싱을 사용하여 주어진 인덱스에 해당하는 행을 선택합니다.
neighbor_tickers[neighbor_tickers['Ticker'] != Ticker]
  • neighbor_tickers에서 입력 Ticker와 일치하지 않는 행을 필터링하여 추천 주식 목록을 만듭니다.