我知道可以使用df.xs(lbl)
所有索引 equal 来访问 DataFrame 的行lbl
,但是,我有以下问题:
我希望能够遍历时间序列( s 的T
简单序列),如下所示:list
datetime
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
我遇到的问题是:
- 如果
t
不在 中df
,KeyError
则引发 a。 t
如果in仅有一个条目df
,则生成一个Series
对象- 如果 中 有多个
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