안녕하세요.
사이트에서 올려주신 내용으로 파이썬 공부를 하고 있는데, 많은 도움에 감사 드립니다.
파이썬 공부를 하면서 회사 업무에 적용을 하고 싶어서, 공부중인데 궁금한 내용을 문의좀 드립니다.
<원본데이터>
제품분류 | 제품코드 | 내외구분 | 거래처 | 납품일자 | 수량 | 프로젝트코드 | 납품연도 | 납품월 |
CT-12 | A | 내수 | 삼성전자 | 2020-01-10 | 2 | CTM-20-01 | 2020 | 1 |
CT-12 | B | 내수 | LG전자 | 2020-04-07 | 3 | CTM-20-02 | 2020 | 4 |
CR-10 | C | 수출 | 애플 | 2020-05-01 | 2 | CTM-20-03 | 2020 | 5 |
CB-11 | A | 내수 | 자화전자 | 2021-05-13 | 4 | CTM-20-04 | 2021 | 5 |
CC-13 | B | 내수 | 대우전자 | 2021-05-15 | 3 | CTM-20-05 | 2021 | 5 |
CC-13 | C | 내수 | 대우전자 | 2021-05-15 | 5 | CTM-20-05 | 2021 | 5 |
파이썬 명령 : card.groupby(['납품연도', '제품코드'])['수량'].sum()
<실행후 결과>
납품연도 제품코드 수량
2020 a 2
b 3
c 2
2021 a 4
b 3
c 5
문의 1. 연도별, 수량 기준으로 내림차순하려고 하는데 어떻게 적용을 해야 되는건지 문의 드립니다.
<희망하는 결과 값>
납품연도 제품코드 수량
2020 b 3
a 2
c 2
2021 c 5
a 4
b 3
문의 2. 위의 결과를 가지고 연도별, 제품별로 수량을 가지고 그래프를 표현하고 싶은데, 도움을 주시면 감사 드리겠습니다.
Comment 1
-
지영아빠
2022.02.20 22:34
group by 결과는 groupby 칼럼 자체가 index가 되기 때문에 정렬하기 어렵습니다.
원하는 결과는 아니더라도
dat = [
{'yy' : 2020, 'cd' : 'A', 'qty' : 2},
{'yy' : 2020, 'cd' : 'B', 'qty' : 3},
{'yy' : 2020, 'cd' : 'C', 'qty' : 2},
{'yy' : 2021, 'cd' : 'A', 'qty' : 4},
{'yy' : 2021, 'cd' : 'B', 'qty' : 3},
{'yy' : 2021, 'cd' : 'C', 'qty' : 5},
]
card = pd.DataFrame(dat)
#### 이런 결과를 원하시는 것 같음...
card.sort_values(by=['yy', 'qty'], ascending=[True, False])
차트로 visual하면 대략 아래의 코드일 것 같습니다
import matplotlib.pyplot as plt
df_A = card[card['cd'] == 'A'].groupby('yy').sum()
df_B = card[card['cd'] == 'B'].groupby('yy').sum()
df_C = card[card['cd'] == 'C'].groupby('yy').sum()
index = np.arange(len(card['cd'].unique()))
label = ['', '2020', '2021']
bar_width=0.3
p1 = plt.bar(bar_width, df_A.loc[[2020], 'qty'] , bar_width, color='blue')
p2 = plt.bar(2*bar_width, df_B.loc[[2020], 'qty'] , bar_width, color='red')
p3 = plt.bar(3*bar_width, df_C.loc[[2020], 'qty'] , bar_width, color='green')
p4 = plt.bar(5*bar_width, df_A.loc[[2021], 'qty'] , bar_width, color='blue')
p5 = plt.bar(6*bar_width, df_B.loc[[2021], 'qty'] , bar_width, color='red')
p6 = plt.bar(7*bar_width, df_C.loc[[2021], 'qty'] , bar_width, color='green')
plt.title('product_by_YY')
plt.xlabel('YY')
plt.ylabel('qty')
plt.xticks(index, label)
plt.show()
참고바랍니다.