ホーム>source

1000以上の.txtファイルを在庫日付と価格で辞書にキャストしました(ファイル名(株式相場)をキーとして、各ファイルのデータをデータフレームとして)。 .rollingを使用して移動平均を計算し、移動平均と価格の差の割合を求めました。したがって、パーセントの違いは、各DataFrameの独自の列です。これらすべてのコードは次のようになります。

<前>ウィズウィズ

私の質問は、どのようにしてpctdiffカラムの上位5つの最大値(および負になる可能性があるため最小値)を見つけるかです。

私はもう試した:

<前>ウィズウィズ

しかし、次のエラーが発生します:「 'float'オブジェクトは反復可能ではありません」

filelist = os.listdir(r'Insert File Path') filepath = r'Insert File Path' dic1 = {} for file in filelist: df = pd.read_csv(filepath + file,sep='\t') dic1[file]= df for value in dic1.values(): value.rename(columns={value.columns[0]:'Dates',value.columns[1]:'Prices'},inplace=True) for value in dic1.values(): value['ma'] = value['Prices'].rolling(window=50).mean() for value in dic1.values(): value['diff'] = value['Prices'] - value['ma'] for value in dic1.values(): value['pctdiff']= value['diff']/value['Prices']
あなたの答え
  • 解決した方法 # 1

    これはどういう意味ですか?

    <前>ウィズウィズ

  • 解決した方法 # 2

    コードをもう少しクリーンにして、変数をすべて実行して、1つのforループに4つを追加します。

    <前>ウィズウィズ

    ここで@Edchumの回答を使用して list_result = [] for key,value in dic1.items(): value.rename(columns={value.columns[0]:'Dates',value.columns[1]:'Prices'},inplace=True) value['ma'] = value['Prices'].rolling(window=50).mean() value['diff'] = value['Prices'] - value['ma'] value['pctdiff']= value['diff']/value['Prices'] list_result.append([key,df['pctdiff'].max()]) list_result.sort(key = lambda x : x[1] ) highest_list = list_result[-5:] smallest_list = list_result[:5] を並べ替えます  絶対値(オブジェクトが他の場合はパンダシリーズに変換します)。次のようなもの(並べ替えて保存する場合)

    <前>ウィズウィズ filelist = os.listdir(r'Insert File Path') filepath = r'Insert File Path' dic1 = {} for file in filelist: df = pd.read_csv(filepath + file,sep='\t') dic1[file]= df for value in dic1.values(): value.rename(columns={value.columns[0]:'Dates',value.columns[1]:'Prices'},inplace=True) value['ma'] = value['Prices'].rolling(window=50).mean() value['diff'] = value['Prices'] - value['ma'] value['pctdiff']= value['diff']/value['Prices']

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ leaflet - GridLayerタイルで緯度/経度を変換してピクセル位置を修正する方法