Pandas根据元组列表中的索引值分割数据帧

2024-06-16 08:55:19 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个包含索引值的元组列表:

mapper= [(0,6),(9,13),(17,27)]

我有一个大的master_df,我想根据上面列表中的元组索引值将其拆分为多个df

映射器[0][0]是起点,映射器[0][1]是终点。我有一个df名字的列表

df_list= ['df_1','df_2,'df_3']

我尝试了下面的代码片段,尝试根据映射器中的索引值填充多个df

for x in range(len(df_list)):
    df_list[x] = master_df[mapper[x][0]:mapper[x][1]]

但这并不是我想象的那样。对我来说,理想的解决方案是根据列表中的元组索引值对主函数进行三次单独的df拆分

以下是我试图完成的一个例子:

master_df:
     Name    Role       Location
0    Gina    Assistance    NY
1    Jake    Officer       Brooklyn
2    Boyle   Detective     99
3    Scully  Assistance    NY
4    Diaz    Officer       Brooklyn
5    Hitchcock Detective     99
6    Amy    Assistance    NY
7    Terry    Officer       Brooklyn
8    Holt   Detective     99
9    Judy   Assistance    NY
10   Adrian Officer       Brooklyn

mapper = [(0,3),(3,6),(6,11)]
df_list = ['df_1','df_2','df_3']

寻求结果

df_1:
     Name    Role       Location
0    Gina    Assistance    NY
1    Jake    Officer       Brooklyn
2    Boyle   Detective     99

df_2:
     Name    Role       Location
3    Scully  Assistance    NY
4    Diaz    Officer       Brooklyn
5    Hitchcock Detective     99

df_3:
     Name    Role       Location
6    Amy    Assistance    NY
7    Terry    Officer       Brooklyn
8    Holt   Detective     99
9    Judy   Assistance    NY
10   Adrian Officer       Brooklyn

感谢您的帮助/指导


Tags: namemasterdf列表locationlistrole元组
1条回答
网友
1楼 · 发布于 2024-06-16 08:55:19

您可以使用*解压元组,并将其传递给range函数,然后使用iloc[]获取这些索引:

df_list=[df.iloc[range(*i),:] for i in mapper]

[     Name        Role  Location
 0   Gina  Assistance        NY
 1   Jake     Officer  Brooklyn
 2  Boyle   Detective        99,
         Name        Role  Location
 3     Scully  Assistance        NY
 4       Diaz     Officer  Brooklyn
 5  Hitchcock   Detective        99,
      Name        Role  Location
 6      Amy  Assistance        NY
 7    Terry     Officer  Brooklyn
 8     Holt   Detective        99
 9     Judy  Assistance        NY
 10  Adrian     Officer  Brooklyn]

如果你想把它们分配给名字,你必须把它做成一本字典(见How to create a variable number of variables

df_dict=dict(zip(df_list,[df.iloc[range(*i),:] for i in mapper]))

{'df_1':     Name        Role  Location
 0   Gina  Assistance        NY
 1   Jake     Officer  Brooklyn
 2  Boyle   Detective        99,
 'df_2':         Name        Role  Location
 3     Scully  Assistance        NY
 4       Diaz     Officer  Brooklyn
 5  Hitchcock   Detective        99,
 'df_3':       Name        Role  Location
 6      Amy  Assistance        NY
 7    Terry     Officer  Brooklyn
 8     Holt   Detective        99
 9     Judy  Assistance        NY
 10  Adrian     Officer  Brooklyn}

相关问题 更多 >