inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

남박사의 파이썬 기초부터 실전 100% 활용

조건문 (if, else, elif)

같은조건이라면 합계를 구하는 방법이 if else로 가능할지 궁금합니다

해결된 질문

521

Jh Kim

작성한 질문수 2

2

안녕하세요 박사님

좋은 강의 잘보고 있습니다

if else 강의 중에 원하는 값을 알고있을때의 조건문은 가능하지만 원하는 값이 아니라 같은조건일때 합계를 구하는거에

의문이 생겨 여쭙습니다.

아래의 데이타 프레임이 있습니다.

name    food        price

홍길동    볶음밥     5600

홍길동    떡볶이     6000

가가멜    볶음밥     5600

가제트    탕수육     6200

가가멜    볶음밥     5600

홍길동    볶음밥     5600

 name과 food가 같은값일때 price의 합계를 구하려면

if  df['name'] == df['name'] and df['food'] == df['food'] :

    df[ 'price'].sum()

이런식으로 도 가능할까요?

웹-크롤링 python

답변 1

2

남박사

일단 전체코드를 보지 않아서 어떤 의견을 드리기가 애매합니다만..

일단 위의 데이터가 어디에 어떤 형태로 존재하는지를 알아야 할듯 합니다. 그래야 데이터를 어떻게 관리할지가 판단되기 때문입니다. 

if df["name"] == df["name"] 

이런식의 형태 역시 데이터를 어떻게 보관하고 있냐를알아야 답변드릴 수 있어보입니다.

보통 복수개의 데이터로 존재할텐데 그렇게 되면 for 문이나 while 문의 반복문이 필요할테고 그럴경우에는 위 처럼 사용하실수가 없습니다. 

일단 만약 df["name"] 의 자료형태가 dict 라면 sum() 이라는 메소드가 없습니다.

따라서 이런경우라면 변수를 따로 선언해서 

tot_price += df['price']

이렇게 tot_price 변수에 값을 누적시켜서 사용해야 할듯 보입니다.

df['price'] += df['price'] 

이렇게 그냥 그 값에 누적을 시킬수도 있습니다만 이 경우에는 원래 값 df['price'] 가 변하기 때문에 만약 로직에서 df["price"] 값을 재사용하게 된다면 프로그램에 의도치 않은 계산 오류가 생기게 됩니다.

datas = [
    ["홍길동", "볶음밥", 5600],
    ["홍길동", "떢볶이", 6000],
    ["가가멜", "볶음밥", 5600],
    ["가제트", "탕수육", 6200],
    ["가가멜", "볶음밥", 5600],
    ["홍길동", "볶음밥", 5600]
]

# 누적된 결과 데이터를 저장할 리스트 변수를 새로 선언합니다.
result_lists = []

# 데이터에서 서로 중복되는 값을 체크하기 위해서 2중 for 문을 돌아야 서로 비교를 할 수 있습니다.
# 이렇게 2중 for문을 도는게 가장 일반적인 방법 입니다.
# 안쪽 for 문의 시작값은 0 이 아니라 바깥쪽 for 문의 인덱스 + 1 을 해야 합니다.
for i in range(0, len(datas)):
    for j in range(i + 1, len(datas)):
        # i 번째 데이터와 j 번째 데이터를 비교합니다. 쉽게 현재데이터와 다음데이터를 비교하는 방법입니다.
        if(datas[i][0] == datas[j][0] and datas[i][1] == datas[j][1]):
            result_lists.append({
                datas[i][0],
                datas[i][1],
                datas[i][2] + datas[j][2]
                })

print(result_lists)

질문 내용을 일반적인 리스트 형태로서 구현하자면 위와비슷하게 구현하실 수 있습니다.

결국에 result_lists 라는 리스트 변수를 따로 선언해서 결과를 처리하는 방식입니다.

만약 df 의 자료형태가 pandas 의 데이터 프레임을 사용한거라면 (제강좌에서 판다스에 대해선 소개하지 않았습니다만.)

import pandas

df = pandas.DataFrame({
    "name": ["홍길동", "홍길동", "가가멜", "가제트", "가가멜", "홍길동"],
    "food": ["볶음밥", "떡볶이", "볶음밥", "탕수육", "볶음밥", "볶음밥"],
    "price": [5600, 6000, 5600, 6200, 5600, 5600]
    })

# food 가 볶음밥인 경우의 데이터프레임을 새롭게 생성하고 
df2 = df[df["food"] =="볶음밥"]

# 새롭게 생성된 데이터프레임에서 다시 홍길동이 있는데이터의 sum() 을 구하고 price를 출력
print(df2[df2["name"] == "홍길동"].sum()["price"])

pandas를 사용하는 경우에는 위와 같이 처리할 수도 있습니다만 pandas에 해서는 강좌에서 다루지 않은 내용이고 pandas자체의 사용법은 뭐 다른 라이브러리랑 별반 다를건 없지만 데이터분석에서 많이 사용하는 만큼 내가 원하는 적재적소의 상황에서 자유롭게 다룰려면 많은 공부와 연습을 해보셔야하는 부분이긴 합니다.

아무튼 위의 답변이 도움되셨길 바랍니다. 더 궁금하신점 있으면 질문 주세요

38강 = 연산자 더하고 빼기

0

60

2

주석처리

0

117

1

함수의 파라미터값 msg

0

155

1

강의자료 이미지 안나옴

0

239

3

강의자료 질문 두번째

0

165

3

강의자료 관련 질문

0

116

1

파이썬 예외 처리 try / except 파일 처리 코드가 실행이 안됩니다.

0

235

1

소수 너무 어려워요

0

245

1

imagefont 함수 사용

0

239

1

pylint

0

357

1

add 함수 문의 ㅠㅠ

0

283

1

형식 문의드립니다.

0

210

1

변수 명을 왜 src, tar로 하셨는지 궁금합니다.

0

602

1

숫자야구 코드를 짜 봤는데 뭔가 이상합니다.

0

253

1

zsh: command not found: pylint

0

269

1

텔레그램 봇 만들기 코드 실행이 안됩니다 박사님..ㅠ

0

546

1

질문드립니다.

1

374

2

list.reverse() 출력에 대해서 질문있습니다.

1

433

1

데코레이터 함수 및 동작시간 질문입니다.~

1

323

2

opencv 사용하면서 궁금한점 (해상도)

1

781

1

질문드립니다.

1

299

1

아래 오류가 뜨면서 vscode가 컴파일이 되지 않는데.. 혹시 왜이럴까요?

1

445

1

크롤링안되는 현상 문의 드립니다.

1

422

1

파이썬 크롤링 관련 문의

1

278

1