0

我知道可以使用df.xs(lbl)所有索引 equal 来访问 DataFrame 的行lbl,但是,我有以下问题:

我希望能够遍历时间序列( s 的T简单序列),如下所示:listdatetime

wheredfA是由 all 索引的数据帧T,并且dfB是具有多个(一些重复)索引的数据帧T,但不是全部T

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. 如果t不在 中dfKeyError则引发 a。
  2. t如果in仅有一个条目df,则生成一个Series对象
  3. 如果 中 有多个t,则df产生一个DataFrame对象

正如你所看到的,这会为一些应该相当直接的东西编写相当丑陋的代码。我确信必须有一种更熊猫的方式来做到这一点,但这对我来说并不明显。

更新:

转储T如下dfB

注意:我已将T原始代码更改为 a 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 回答