Эффективный метод разделения данных в несколько раз в Python? - PullRequest
0 голосов
/ 19 октября 2019

В настоящее время у меня есть pandas DataFrame df с размером 168078 строк × 43 столбца. Сводка df приведена ниже:

              doi                           gender       order       year       ...       count
9384155       10.1103/PRL.102.039801        male         1           2009       ...       1
...
3679211       10.1103/PRD.69.024009         male         2           2004       ...       501

df в настоящее время сортируется по count и поэтому варьируется от 1 до 501.

Я бы хотел разделитьdf на 501 меньших подданных, разделив их по количеству. Другими словами, в конце процесса у меня будет 501 различная суб df с каждым значением count характеристики.

Поскольку число результирующих (желаемых) фреймов данных достаточно велико, и, посколькуэто количественные данные, мне было интересно, если:

а) можно разбить DataFrame столько раз (если да, то как), и

б) можноНазовите каждый DataFrame количественно, не назначая имя 501 раз вручную;то есть, например, df с count == 1 будет df.1 без необходимости его назначения.

Ответы [ 2 ]

1 голос
/ 19 октября 2019

вы можете просто использовать groupby, чтобы получить результат, как показано ниже g.groups: даст имя группы (идентификатор группы) для каждой группы g.get_group: даст вам одну группу с данным именем группы

import numpy as np
import pandas as pd

df=pd.DataFrame({'A':np.random.choice(["a","b","c", "d"], 10),
                 'count':np.random.choice(10,10)
                })

g = df.groupby("count")
for key in g.groups:
    print(g.get_group(key))
    print("\n---------------")

Результат

   A  count
3  c      0

---------------
   A  count
9  a      2

---------------
   A  count
0  c      3
2  b      3

---------------
   A  count
1  b      4
5  d      4
6  a      4
7  b      4

---------------
   A  count
8  c      5

---------------
   A  count
4  d      8

---------------
1 голос
/ 19 октября 2019

Лучшая практика, которую вы можете сделать, это создать словарь фреймов данных. Ниже я покажу вам пример:

df=pd.DataFrame({'A':[4,5,6,7,7,5,4,5,6,7],
                 'count':[1,2,3,4,5,6,7,8,9,10],
                 'C':['a','b','c','d','e','f','g','h','i','j']})
print(df)

   A  count  C
0  4      1  a
1  5      2  b
2  6      3  c
3  7      4  d
4  7      5  e
5  5      6  f
6  4      7  g
7  5      8  h
8  6      9  i
9  7     10  j

Теперь мы создаем словарь. Как видите, ключом является значение count в каждой строке. имейте в виду, что здесь Series.unique используется для того, чтобы в случае, когда две строки с одинаковым значением счетчика были созданы в одном словаре.

dfs={key:df[df['count']==key] for key in df['count'].unique()}

Ниже я показываю содержание всего созданного словаря и как получить к нему доступ:

for key in dfs:
    print(f'dfs[{key}]')
    print(dfs[key])
    print('-'*50)


dfs[1]
   A  count  C
0  4      1  a
--------------------------------------------------
dfs[2]
   A  count  C
1  5      2  b
--------------------------------------------------
dfs[3]
   A  count  C
2  6      3  c
--------------------------------------------------
dfs[4]
   A  count  C
3  7      4  d
--------------------------------------------------
dfs[5]
   A  count  C
4  7      5  e
--------------------------------------------------
dfs[6]
   A  count  C
5  5      6  f
--------------------------------------------------
dfs[7]
   A  count  C
6  4      7  g
--------------------------------------------------
dfs[8]
   A  count  C
7  5      8  h
--------------------------------------------------
dfs[9]
   A  count  C
8  6      9  i
--------------------------------------------------
dfs[10]
   A  count  C
9  7     10  j
--------------------------------------------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...