私は在庫データを扱っており、特定のタイプの分析を実行する際にデータセットのデータ長が同じになるようにしたいと考えています。ディクショナリに格納された複数のDataFramesの列を効率的にフィルタリングする方法を教えてください。
問題
I アップルの負荷データIは、1985年以来、毎日のデータを取得する場合は天然ガスETFの負荷データは、それだけで今まで遡って2012年のように私に行く可能性がある場合Appleをフィルタリングしたい場合は、2012年の履歴のみを表示してください。また、終了日は、のように最新のデータセットではない可能性があります。Appleのデータは1985年から1-20-17まで、 天然ガスETFのデータは2012年から12-23-16の範囲です。私はまた、最大日付を設定する別のフィルタが欲しい。これで、2012年から12月23日までの日付のリンゴデータセットがフィルタリングされました。今私のデータセットは等しいです。
アプローチ
私は私のdateframesのすべてを格納株式と呼ばれる辞書を持っています。すべてのデータフレームにはDという名前の列があり、これはの日付列です。
私は、辞書にデータフレームを取り込み、各dfの最小値と最大値を取る関数を書いています。私はこれら2つの辞書の最小値を他の2つの辞書に保存しますDatesMaxとDateMinこれらの2つの辞書の最小値と最大値を取って、すべてのデータフレームのフィルタ値に使用される最大値と最小値を取得します。
以下の関数は、複数のデータフレームの最小値と最大値を取得し、という名前の辞書に返します。DatesMinMax
def MinMaxDates (FileName):
DatesMax = {}; DatesMin = {}
DatesMinMax = {}; stocks = {}
with open (FileName) as file_object:
Current_indicators = file_object.read()
tickers = Current_indicators.split('\n')
for i in tickers:
a = '/' in i
if a == True:
x = i.find("/")+1
df = pd.read_csv(str(i[x:]) + '_data.csv')
stocks[i] = df
maxDate = max(df.D)
minDate = min(df.D)
DatesMax[i] = maxDate
DatesMin[i] = minDate
else:
df = pd.read_csv(i + '_data.csv')
stocks[i] = df
maxDate = max(df.D)
minDate = min(df.D)
DatesMax[i] = maxDate
DatesMin[i] = minDate
x = min(DatesMax.values())
y = max(DatesMin.values())
DatesMinMax = {'MaxDate' : x, 'MinDate' : y}
return DatesMinMax
print DatesMinMax
# {'MinDate': '2012-02-08', 'MaxDate': '2017-01-20'}
質問
今、私はそこに日付列をフィルタするために辞書名に株式をすべてのデータフレームの私のループを実行する必要があります。何かを再度ループするのは非効率的だと思われますが、フィルタを適用する他の方法は考えられません。