>

파이썬 계산에 관한 질문이 있습니다. 다음과 같은 CSV 파일이 있습니다 :

GOOG,100,900.10
MSFT,50,68.99
AAPL,100,152.92
IBM,5,151.95
GOOG,150,901.25
AAPL,50,152.25
TEAM,100,36.91
NVDA,75,117.88
INTC,200,36.24
IBM,10,151.91
AAPL,700,152.15
GOOG,100,900.99
GOOG,50,900.12

데이터 세트가 명확하게 정의되어 있지 않으므로 설명해야합니다. 첫 번째 열은 계측기이고 두 번째 열은 수량이며 마지막 열은 가격입니다. 이 CSV 파일을 읽은 다음 데이터를 기준으로 분할 된 열을 작성해야합니다. 그런 다음 수량에 가격을 곱하여 가치를 계산해야합니다. 그 후, 나는 거래의 수를 세고 다음과 같이 가장 일반적인 5 가지 도구를 인쇄해야합니다 :

Top 5 trades by number of trades:
 GOOG:   4 trade(s) total of  400 shares, $ 360,302.50
 AAPL:   3 trade(s) total of  850 shares, $ 129,409.50
  IBM:   2 trade(s) total of   15 shares, $   2,278.85
 MSFT:   1 trade(s) total of   50 shares, $   3,449.50
 TEAM:   1 trade(s) total of  100 shares, $   3,691.00

완료되지 않아 다음 코드가 작동하지 않습니다 :

from collections import defaultdict, Counter
 def analyse(filename):
   # I should write my counter here
   with open(filename) as src:
     for line in src:
       instrument, quantity, price = line.split(',')
       quantity = int(quantity)
       # I should compute value here
   # I need summarize my results here
   # This print can help me
print(f'{inst:>5}:  {count:2} trade(s) total of {quantity:4} shares, ${value:11,.2f}')
 if __name __ == '__main__':
   analyse('filename')

파이썬을 처음 접했기 때문에이 문제를 혼자서 해결할 수는 없습니다. 도움을 주시면 감사하겠습니다.

  • 답변 # 1

    header 매개 변수와 함께pandas.read_csv ()를 사용해야합니다.  그리고 names  csv에 열 머리글이 없음을 지정하고 자신의 열 이름을 지정하십시오. 그런 다음 perfom 곱셈을 수행하고 새 열을 만듭니다. 5 대 거래를하려면 groupby 를 누른 다음 상위 5 개를 선택하기 전에 내림차순으로 정렬하십시오.

    df = pd.read_csv("foo.csv", header=None, names=['instrument','qty', 'price'])
    df['amt'] = df['qty'] * df['price']
    g = df.groupby('instrument').agg({
    'instrument':'count', 
    'qty':'sum',
    'amt':'sum'
    }).rename(columns={'instrument':'count'}).sort_values(by=['count'], ascending=False).head(5)
    for msg in (pd.Series(g['instrument'].map(str) + ": " + g['count'].map(str) + " trade(s) total of " + g['qty'].map(str) + " shares, $ " + round(g['amt'],2).map(str)).values):
       print(msg)
    
    

    출력 :

    GOOG: 4 trade(s) total of 400 shares, $ 360302.5
    AAPL: 3 trade(s) total of 850 shares, $ 129409.5
    IBM: 2 trade(s) total of 15 shares, $ 2278.85
    INTC: 1 trade(s) total of 200 shares, $ 7248.0
    MSFT: 1 trade(s) total of 50 shares, $ 3449.5
    
    

  • 답변 # 2

    팬더를 확인하십시오. 필요한 모든 것을 할 수 있습니다.

    시작 :

    df = pandas.read_csv(<filename>, usecols = ['ticker', 'price', quantity']))

    usecols 사용  CSV에 열 이름이있는 경우 그렇지 않으면 나중에 설정하십시오. df.columns = ['ticker', 'price', quantity'] .

    그런 다음과 같은 칼럼에서 작업 할 수 있습니다 :

    df['result'] = df['price'] * df['quantity']

  • 답변 # 3

    먼저 csv 를 읽으십시오   pandas.read_csv 를 사용한 파일 . 그런 다음 amount 를 계산하십시오.  열과 pd.groupby  당신의 가치

    import pandas as pd
    a = pd.read_csv("path/to/file.csv") # optional args: names=['stock','volum', 'price'], header=None
    a["amount"] = a["volum"] * a["price"]
    b = a.groupby("stock").agg({"volum":sum, "amount":sum, "stock": "count"})
    
    

    그럼 pd.sort_values  ~처럼

    b = b.sort_values("amount", ascending=False)
    
    

    마지막으로 다음과 같이 텍스트를 연결할 수 있습니다.

    b["text"] = b.index + ":   " + b["stock"].astype(str) + " trade(s) total of  " + b["volum"].astype(str) + " shares, $ " + b["amount"].astype(str)
    
    

    이제 print(b["text"]) 라면  원하는 결과를 얻습니다

    GOOG:   4 trade(s) total of  400 shares, $ 360,302.50
     AAPL:   3 trade(s) total of  850 shares, $ 129,409.50
      IBM:   2 trade(s) total of   15 shares, $   2,278.85
     MSFT:   1 trade(s) total of   50 shares, $   3,449.50
     TEAM:   1 trade(s) total of  100 shares, $   3,691.00
    
    

  • 이전 reactjs - jest에서 mock 함수의 반환 값을 테스트하는 방법
  • 다음 apache kafka - KSQL 스팀 테이블 왼쪽 조인이 부분적으로 (자동으로) 값을 채우지 못함