Есть ли функция groupby, которая может создать новый фрейм данных от имен до подчеркивания? - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь настроить скрипт в пандах, который может помочь мне отсортировать некоторые данные, я работаю над тем, как это сделать, вот как мне удалось продвинуться. Это моя первая попытка панд.

Моя идея такова: иметь CSV с 4 столбцами: 1 с именем и 3 с данными. Я хочу сгруппировать данные, основанные на имени, имена всегда будут иметь подчеркивание + заключающее число в конце, и оно будет различным. Мне еще предстоит выяснить, как его кодировать, так что теперь я пытаюсь разбить данные по одинаковым символам.

Вот мой код:

import pandas as pd import matplotlib.pyplot as plt from matplotlib import style df = pd.read_csv("C:\Python27\Projects\Pandas\csv_testing\csvtesty.csv",header=None,names=['names','x','y','z','code'])
#df.set_index('names',inplace=True) g = (df.groupby(['names', df.names.str[:3]])) for names, names_df in g:
    print(names)
    print(names_df)

Образец моего csv:

e3_30,3232.77,652478.1833,112.100,10272
e3_31,3232.78,652478.1834,112.101,10471
e3_32,3232.79,652478.1835,112.102,10670
dawn21_1,3232.70,652478.1826,112.093,10869
dawn21_2,3232.78,652478.1834,112.101,11068
dawn21_3,3232.86,652478.1842,112.109,11267
dawn21_4,3232.94,652478.1850,112.117,11466
dawn21_5,3232.102,652478.1858,112.125,11665

Я пытался разделить их на кадры данных с одинаковыми именами.

Часть моего вывода:

 names        x          y       z  code
0  d1_1  3232.27  652478.07  112.05   123
   names       x           y        z  code
9  d1_10  3232.4  652478.464  112.063  1914
    names        x           y        z  code
10  d1_11  3232.42  652478.577  112.065  2113
    names        x          y        z  code
11  d1_12  3232.44  652478.69  112.067  2312
    names        x           y        z  code
12  d1_13  3232.46  652478.803  112.069  2511
    names        x           y        z  code
13  d1_14  3232.48  652478.916  112.071  2710
    names       x            y        z  code
14  d1_15  3232.5  652478.1029  112.073  2909
    names        x            y        z  code
15  d1_16  3232.52  652478.1142  112.075  3108
    names        x            y        z  code
16  d1_17  3232.54  652478.1255  112.077  3307
    names        x            y        z  code
17  d1_18  3232.56  652478.1368  112.079  3506
    names        x            y        z  code
18  d1_19  3232.58  652478.1481  112.081  3705
  names        x          y        z  code
1  d1_2  3232.28  652478.08  112.051   322
    names       x            y        z  code
19  d1_20  3232.6  652478.1594  112.083  3904
    names        x            y        z  code
20  d1_21  3232.62  652478.1707  112.085  4103
    names        x           y        z  code
21  d1_22  3232.64  652478.182  112.087  4302
  names        x          y        z  code
2  d1_3  3232.29  652478.09  112.052   521
  names       x         y        z  code
3  d1_4  3232.3  652478.1  112.053   720
  names        x          y        z  code
4  d1_5  3232.31  652478.11  112.054   919
  names        x          y        z  code
5  d1_6  3232.32  652478.12  112.055  1118
  names        x           y        z  code
6  d1_7  3232.34  652478.125  112.057  1317
  names        x           y        z  code
7  d1_8  3232.36  652478.238  112.059  1516

Все примеры, которые я могу найти, имеют разные имена в столбце, по которым они хотят разделить их. Некоторая помощь или указатели помогут мне много.

1 Ответ

0 голосов
/ 06 января 2019

Используйте разделение на _ и выберите первые списки по индексу:

g = df.groupby(df.names.str.split('_').str[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...