我有一个名为 namelist 的列表,其中包含 1000 个名称和一个名为 df_all 的数据框,其中包含所有 1000 个名称,但由于时间戳不同而具有重复的行。df_all 的 Len 大约是 2000+。我想将这些数据拆分成单独的数据帧。我的代码如下:df_store = [] for i in range(len(namelist)) : temp = [] for j in range(len(df_all)): if(df_all['name'] == namelist[i]) : temp1.append(df_all[j,:]: temp_df=pd. DataFrame(temp1).reset_index(drop=1) df_store.append(temp_df)此代码需要 15 分钟才能循环。我想知道是否有办法更有效地做到这一点?我需要 df_store 是可迭代的,这样每个迭代器都是一个不同名称的 df。
1 回答
牧羊人nacy
TA贡献1862条经验 获得超7个赞
您不需要运行两个循环来获得结果。Pandas DataFrame 提供布尔数组索引,它也非常快。请检查以下内容:
df_store = []
for i in range(len(namelist)) :
temp_df = df_all[df_all.name==namelist[i]].copy()
df_store.append(temp_df)
在这里我使用了复制函数,因为 df_all 上的布尔索引将返回 df_all 上的视图,并且修改其中的任何内容都会对原始 df_all 产生相同的影响。
希望这可以帮助!!
添加回答
举报
0/150
提交
取消