Pandas разделение фреймов данных на основе значений индекса из списка кортежей - PullRequest
0 голосов
/ 24 февраля 2020

Предположим, у меня есть список кортежей со значениями индекса:

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

И у меня есть большой master_df , который я хочу разделить на несколько df на основе значений индекса кортежа из список выше.

mapper [0] [0] является начальной точкой, а mapper [0] [1] является конечной точкой. И у меня есть список имен df.

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

Я попробовал следующий фрагмент ниже, пытаясь заполнить несколько df на основе значений индекса из mapper

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

Но это не так, как я себе представляю. Идеальным решением для меня было бы три отдельных df-разбиения master_df на основе значения индекса кортежа из списка.

Вот пример того, что я пытаюсь выполнить sh:

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

Любая помощь / руководство приветствуется!

1 Ответ

1 голос
/ 24 февраля 2020

Вы можете распаковать кортежи с помощью * и передать их в функцию диапазона, затем используйте 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]

И если вы хотите, чтобы они присваивались именам, вам придется сделать из него словарь (см. Как создать переменное число переменных )

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}
...