我有一个列表
a = [15, 50 , 75]
使用上面的列表,我必须创建较小的数据帧,以从主数据帧中过滤出索引上的行(行数由列表定义)。
假设我的主要数据框是 df 我想要的数据帧是 df1(来自行索引0-15),df2(来自行索引15-65),df3(来自行索引65-125)
由于这只是三个,所以我可以在下面轻松地使用以下内容:
limit1 = a[0]
limit2 = a[1] + limit1
limit3 = a[2] + limit3
df1 = df.loc[df.index <= limit1]
df2 = df.loc[(df.index > limit1) & (df.index <= limit2)]
df2 = df2.reset_index(drop = True)
df3 = df.loc[(df.index > limit2) & (df.index <= limit3)]
df3 = df3.reset_index(drop = True)
但是,如果我想在主数据帧 df 上使用一长串列表来实现此目的,我正在寻找类似以下内容的可迭代对象(无效):
df1 = df.loc[df.index <= limit1]
for i in range(2,3):
for j in range(2,3):
for k in range(2,3):
df[i] = df.loc[(df.index > limit[j]) & (df.index <= limit[k])]
df[i] = df[i].reset_index(drop=True)
print(df[i])
答案 0 :(得分:2)
您可以通过从主数据帧构建数据帧来迭代地从数据帧末尾切出切片来修改代码。
created
另一种选择是使用列表表达式,如下所示:
dfs = [] # this list contains your partitioned dataframes
a = [15, 50 , 75]
for idx in a[::-1]:
dfs.insert(0, df.iloc[idx:])
df = df.iloc[:idx]
dfs.insert(0, df) # add the last remaining dataframe
print(dfs)
答案 1 :(得分:1)