我知道可以使用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
我遇到的问题是:
- 如果
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