Python,Pandas:具有重复索引值的Reindex / Slice DataFrame

时间:2017-01-16 19:52:52

标签: python pandas

让我们考虑一个DataFrame,它包含2010年1月每一天的1行2个值:

date_range = pd.date_range(dt(2010,1,1), dt(2010,1,31), freq='1D')
df = pd.DataFrame(data = np.random.rand(len(date_range),2), index = date_range)

和另一个具有稀疏数据和重复索引值的时间序列:

observations = pd.DataFrame(data =np.random.rand(7,2), index = (dt(2010,1,12),
dt(2010,1,18), dt(2010,1,20), dt(2010,1,20), dt(2010,1,22), dt(2010,1,22),dt(2010,1,28)))

我将第一个DataFrame df拆分为5个DataFrame列表,每个DataFrame包含来自原始数据的1周值数据:df_weeks = [g for n, g in df.groupby(pd.TimeGrouper('W'))]

现在我想将第二个DataFrame的数据拆分相同的5周。也就是说,这意味着在那个特定情况下,结尾的变量obs_weeks包含5个与df_weeks相同时间范围的DataFrame,其中2个是空的。

我尝试使用reindex,例如:Python, Pandas: Use the GroupBy.groups description to apply it to another grouping

和期间:

p1 =[x.to_period() for x in list(df.groupby(pd.TimeGrouper('W')).groups.keys())]
p1 = sorted(p1)
dfs=[]
for p in p1:
    dff = observations.truncate(p.start_time, p.end_time)
    dfs.append(dff)

(见这个问题:Python, Pandas: Boolean Indexing Comparing DateTimeIndex to Period

问题在于,如果observations索引中的某些值是重复的(并且是这种情况),则这些方法函数都不是。我还尝试将observations的索引更改为正常列并对该列进行切片,但我也收到了错误消息。

1 个答案:

答案 0 :(得分:1)

您可以通过一个简单的过滤器来实现这一目标:

y