Pandas:做嵌套 for 循环的更有效方法加上 if

我有一个名为 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。


喵喵时光机
浏览 190回答 1
1回答

牧羊人nacy

您不需要运行两个循环来获得结果。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 产生相同的影响。希望这可以帮助!!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python