작성
·
252
·
수정됨
답변 2
1
pythonic 하지는 않지만 pandastic 하다고 해야 할까요...하여튼~
# 방법 1
df2 = df[df["노선번호"].isin(bus_name["버스번호"])]
df2
# 방법 2
rows = []
for _, row in df.iterrows():
if row["노선번호"] in bus_name['버스번호'].values:
rows.append(row)
df2 = pd.DataFrame(rows) df2
판다스가 묻지 않은(?) 순수한 for문을 쓰고 싶으시다면아래처럼도 해볼 수 있겠습니다.df2 = pd.DataFrame()
for i in range(len(df)):
if df.iloc[i]["노선번호"] in bus_name["버스번호"].values:
df2 = pd.concat([df2, df.iloc[[i]]], axis=0, ignore_index=True)
df2
# 방법3 : apply & lambda
df2 = df[df['노선번호'].apply(lambda x: x in bus_name['버스번호'].values)]
df2
(isin에 비할 바는 아니지만) 코드가 뭔가 짧으면서 리스트컴프리헨션스럽고.. 1
안녕하세요, 인프런 AI 인턴입니다.
님의 질문에 대한 답변입니다.
파이썬DataFrame
에서 특정 조건에 맞는 행 전체를 뽑고 싶을 때는 보통 해당 조건을 만족하는 행을 필터링하는 방법을 사용합니다. 질문에서 i
와 j
가 동일한 값을 가지는 행을 뽑고 싶다고 하셨으므로, 두 컬럼(노선번호와 버스번호)이 일치하는 조건으로 필터링 해보겠습니다.
예를 들어, df
가 DataFrame이고, bus_name
이 다른 Python 객체일 때, 두 객체의 ‘노선번호’와 ‘버스번호’가 일치하는 행을 뽑으려면 아래와 같은 코드를 사용할 수 있습니다. 먼저, 두 데이터의 조건을 비교하여 일치하는 경우만 필터링해야 합니다.
하지만, 주어진 정보만으로는 bus_name
객체의 세부 구조를 정확히 알 수 없어, 정확한 코드 작성은 어렵습니다. bus_name
이 딕셔너리나 다른 DataFrame인 경우 접근 방식이 다를 수 있기 때문입니다. 그래도 기본적인 아이디어를 제공하겠습니다.
DataFrame df
의 ‘노선번호’ 컬럼과 bus_name
의 ‘버스번호’를 비교하는 일반적인 아이디어는 다음과 같습니다:
for i in df['노선번호']:
if i in bus_name['버스번호']: # 이 부분은 bus_name의 구조에 따라 조정 필요
# 조건을 만족하는 행을 출력하거나 다른 작업 수행
print(df[df['노선번호'] == i])
위 코드는 df
의 ‘노선번호’가 bus_name
의 ‘버스번호’에 포함되어 있는지 확인하고, 만약 그렇다면 해당하는 df
의 행 전체를 출력합니다. bus_name
의 실제 구조에 따라 if i in bus_name['버스번호']:
이 부분의 조건문은 수정이 필요할 수 있습니다.
더 정확한 도움을 받고 싶으시다면 bus_name
객체의 정확한 구조나 타입(예를 들어, DataFrame, 리스트, 딕셔너리 등)에 대한 정보를 추가로 제공해 주세요.