Как сгруппировать столбец для сохранения данных в новом фрейме данных и сортировки по дате и времени в пандах с Python 2.7 - PullRequest
0 голосов
/ 04 сентября 2018

Я хочу сгруппировать столбец "Местоположение" моего df , чтобы сохранить его в new_df и отсортировать по столбцу "datetime" с Python 2.7

Это мой ДФ:

>>df
       DateTime     Product     Location       Value
0    12-07-2018           A           S1       1.313
1    12-07-2018           A           S2       3.089
2    12-07-2018           A           S3       1.890
3    12-07-2018           A           S4       3.136
4    12-07-2018           B           S1       3.258
5    13-07-2018           B           S2       3.113
6    13-07-2018           B           S3       2.651
7    13-07-2018           B           S4       2.135
8    13-07-2018           C           S1       1.555
9    14-07-2018           C           S2       2.009
10   14-07-2018           C           S3       1.757
11   14-07-2018           D           S1       1.808
12   14-07-2018           D           S2       1.511
13   15-07-2018           D           S3       2.265
14   15-07-2018           D           S4       2.356
15   15-07-2018           D           S5       2.950
16   15-07-2018           E           S1       3.300
17   16-07-2018           E           S2       3.110
18   16-07-2018           F           S1       2.068

Я бы хотел разделить S1, S2, S3, S4, ... (и т. Д.) В столбце «Местоположение» и отсортировать по дате и времени

Это результат, который мне нужен:

>>new_df_S1
       DateTime     Product     Location       Value
0    12-07-2018           A           S1       1.313
1    12-07-2018           B           S1       3.258
2    13-07-2018           C           S1       1.555
3    14-07-2018           D           S1       1.808
4    15-07-2018           E           S1       3.300
5    16-07-2018           F           S1       2.068

>>new_df_S2
       DateTime     Product     Location       Value
0    12-07-2018           A           S2       3.089
1    13-07-2018           B           S2       3.113
2    14-07-2018           C           S2       2.009
3    14-07-2018           D           S2       1.511
4    16-07-2018           E           S2       3.110

and another (new_df_S3, new_df_S4, new_df_S5, ...) 

Теперь я использую этот код для своего результата , но мой фрейм данных содержит 1000 строк или более. Он использует много времени для поиска в строке S1, S2, ... и сохраняет его в новом_df:

> for r in range(len(df)) :
    if df.iloc[r,2] == "S1":
       new_df_S1.loc[len(new_df_S1)] = [ df.iloc[r, 0], df.iloc[r, 1], 
                                         df.iloc[r, 2], df.iloc[r, 3] ]
    elif df.iloc[r,2] == "S2":
       new_df_S2.loc[len(new_df_S2)] = [ df.iloc[r, 0], df.iloc[r, 1], 
                                         df.iloc[r, 2], df.iloc[r, 3] ]
    elif df.iloc[r,2] == "S3":
       new_df_S3.loc[len(new_df_S3)] = [ df.iloc[r, 0], df.iloc[r, 1], 
                                         df.iloc[r, 2], df.iloc[r, 3] ]
    elif df.iloc[r,2] == "S4":
       new_df_S4.loc[len(new_df_S4)] = [ df.iloc[r, 0], df.iloc[r, 1], 
                                         df.iloc[r, 2], df.iloc[r, 3] ]
    .
    .
    .

       and another (new_df_S5, new_df_S6, ...)

Есть ли способ сократить время для отдельных S1, S2, S3, ...?

1 Ответ

0 голосов
/ 04 сентября 2018

Вы можете использовать это:

gp = df.groupby('Location')

#Create a dictionary of dataframes
new_df = dict(tuple(gp))

ИЛИ

Обновление для сброса индекса для строки 0 ... n

new_df={}
for n,g in gp:
    new_df[n] = g.reset_index(drop=True)

new_df['S1']    

Выход:

      DateTime Product Location  Value
0   12-07-2018       A       S1  1.313
4   12-07-2018       B       S1  3.258
8   13-07-2018       C       S1  1.555
11  14-07-2018       D       S1  1.808
16  15-07-2018       E       S1  3.300
18  16-07-2018       F       S1  2.068

new_df['S2']

Выход:

      DateTime Product Location  Value
1   12-07-2018       A       S2  3.089
5   13-07-2018       B       S2  3.113
9   14-07-2018       C       S2  2.009
12  14-07-2018       D       S2  1.511
17  16-07-2018       E       S2  3.110

. , .

new_df['S4']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...