1

私は Python を使い始めたばかりで、pandas を使用して小さな株式ポートフォリオ アプリを作成しています。私が抱えている問題は、パンダシリーズを作成して、取引に基づいて各株式の経時的な所有株式数を表すポジションクラスにあります。したがって、2012 年 10 月 10 日に IBM で 50 株を購入し、2012 年 10 月 14 日に 10 株を売却した場合、IBM の position.shares シリーズは次のようになります。

  • 2012 年 10 月 10 日: 50
  • 2012/10/11: 50
  • 2012 年 10 月 12 日: 50
  • 2012/10/13: 50
  • 2012/10/14: 40
  • 2012 年 10 月 15 日: 40

取引日から現在の日付までのシリーズを追加し、これらの各シリーズを 1 つに合計することで、これを行う予定です。Series.add 関数を使用しようとしています。これは、新しい取引を表す新しい株式シリーズが古いポジションを NaN にしないようにするためのフィル値が必要だからです。問題は、適切に追加できる実行可能なシリーズを初期化する方法がわからないことです。以下のコードで Series(0) を試しています。

Series([], dtype=float64)

また、値が0のランダムな日付だけで初期化しようとしましたが、別のシリーズを追加した後でも、そのシリーズを取り戻し続けました。

これが私のコードです:

class Position: 
    def __init__(self, trades):
        self.ticker = trades[0].ticker #grab the ticker we are dealing with
        self.shares = Series()
        for trade in trades:
            if trade.tranType == 0 or trade.tranType == 2:
                direction = 1 #a buy increases share amount
            else:
                direction = -1 # a sell decreases share amount
            dateRangeInFolio = pd.DateRange(trade.date, datetime.datetime.today())     #from the event date through today
            shareSer = Series(trade.shares * direction, index=dateRangeInFolio)
            self.shares.add(shareSer, fill_value=0)
        print self.shares        

助けてくれてありがとう。非常に基本的なことが抜けている場合は申し訳ありません。

4

1 に答える 1

1

だから Series.addは合計されたシリーズを返します...既存の Series オブジェクトに追加しただけだと思いました。だから私はこれをしました:

self.shares = self.shares.add(shareSer, fill_value=0)

それ以外の

self.shares.add(shareSer, fill_value=0)

そしてそれは動作します。

于 2012-10-21T14:46:13.557 に答える