0

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

私が抱えている問題は次のとおりです。

  1. にない場合tdf、aKeyErrorが発生します。
  2. tinのエントリが1つしかない場合dfSeriesオブジェクトは結果になります
  3. に複数ある場合、オブジェクトが生成tされますdfDataFrame

ご覧のとおり、これにより、かなり単純なはずのコードがかなり醜くなります。これを行うにはもっとパンダシックな方法があるはずですが、それは私には明らかではありません。

アップデート:

次のようにダンプTdfBます。

注: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
4

1 に答える 1

0

そのまま使えますdfB.reindex(T).iterrows()か?

于 2012-12-11T22:19:48.387 に答える