df.xs(lbl)すべてのインデックスが等しいDataFrameの行にアクセスするために使用できることは知っていlblますが、次の問題があります。
T次のように時系列(sの単純なシーケンシャル)listを反復できるようにしたいと思いdatetimeます。
ここdfAで、はすべてによってインデックス付けされたデータフレームTであり、すべてではないがdfBからの複数の(いくつかの繰り返し)インデックスを持つデータフレームですTT
for t in T:
for r in dfB.xs(t).iterrows():
# do something with r on values in dfA @ t
# do something else with values in dfA @ t
私が抱えている問題は次のとおりです。
- にない場合
tはdf、aKeyErrorが発生します。 tinのエントリが1つしかない場合df、Seriesオブジェクトは結果になります- に複数ある場合、オブジェクトが生成
tされますdfDataFrame
ご覧のとおり、これにより、かなり単純なはずのコードがかなり醜くなります。これを行うにはもっとパンダシックな方法があるはずですが、それは私には明らかではありません。
アップデート:
次のようにダンプTしdfBます。
注:T元のコードをに変更しましたDatetimeIndexが、これによって元の前提が変更されることはありません。
In [26]: T
Out[26]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2000-03-15 00:00:00, ..., 2012-12-26 00:00:00]
Length: 3191, Freq: None, Timezone: None
In [27]: orders #equivalent to dfB
Out[27]:
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 15322 entries, 2000-03-15 00:00:00 to 2012-12-27 00:00:00
Data columns:
Symbol 15322 non-null values
Type 15322 non-null values
Number 15322 non-null values
dtypes: int64(1), object(2)
これは、元のコードスニペットを機能させるのに十分なデータpandasです。
さらに、dfB場所に同じ値の複数のインデックスが含まれていることを示すには、次のようにします。
In [30]: orders.xs(t) #equivalent to dfB.xs(t)
Out[30]:
Symbol Type Number
Date
2012-12-26 0596.HK Buy 1000
2012-12-26 0387.HK Buy 1000
2012-12-26 0342.HK Buy 1000
2012-12-26 0343.HK Buy 1000
2012-12-26 0491.HK Buy 1000