Могут ли панды выбрать некоторые данные или все столбцы, относящиеся к данным, и усреднить каждые 5 строк, используя панд с Python 2.7? - PullRequest
0 голосов
/ 10 сентября 2018

Я хотел бы рассчитать среднее значение или стандартное значение каждые 5 строк в определенном столбце и выбрать данные (первые или последние или все или некоторые данные, которые я выбрал) из другого столбца, используя pandas с python 2.7

Это мой фрейм данных (пример):

>>df
       DateTime     Product     Location       Value       Place
0    12-07-2018           A           S1       1.313       601
1    12-07-2018           B           S1       3.089       601/14
2    12-07-2018           C           S1       1.890       601
3    12-07-2018           D           S1       3.136       601
4**  12-07-2018           E           S1       3.258       601/15
5    13-07-2018           F           S1       3.113       601
6    13-07-2018           G           S1       2.651       601/12
7    13-07-2018           H           S1       2.135       601
8    13-07-2018           I           S1       1.555       602
9**  14-07-2018           J           S1       2.009       602
10   14-07-2018           K           S1       1.757       602
11   14-07-2018           L           S1       1.808       602/11
12   14-07-2018           M           S1       1.511       603/10
13   15-07-2018           N           S1       2.265       603
14** 15-07-2018           O           S1       2.356       603
15   15-07-2018           P           S1       2.950       603/09
16   15-07-2018           Q           S1       3.300       603/09

Теперь я могу усреднять значение каждые 5 строк и выбирать данные из столбца «DateTime», «Place» (первый или последний), используя этот код ( пример. Среднее и выбрать последний ):

new_df = df[:(len(df)//5)*5].groupby(df[:(len(df)//5)*5].index // 5).agg({'DateTime':'last', 'Value':'mean', 'Place':'last'})

Это результат среднего значения каждые 5 строк и выбора последних данных ( пример. Среднее и выбора последнего ):

>> new_df
     DateTime       Value     Place
0  12-07-2018      2.5372     601/15
1  14-07-2018      2.2926     602
2  15-07-2018      1.9394     603

Если я хочу получить такой же результат (средний, выберите последний и все):

>> new_df
     DateTime   Product      Value      Place
0  12-07-2018   A,B,C,D,E    2.5372     601, 601/14, 601, 601, 601/15
1  14-07-2018   F,G,H,I,J    2.2926     601, 601/12, 601, 602, 602 
2  15-07-2018   K,L,M,N,O    1.9394     602, 602, 602/11, 603/10, 603

и (в среднем выберите некоторые данные)

>> new_df
     DateTime   Product      Value      Place
0  12-07-2018   A,C,E        2.5372     601, 601/14, 601
1  14-07-2018   F,G          2.2926     601, 601/12
2  15-07-2018   L,M,N,O      1.9394     602/11

Могут ли панды сделать это ???

Примечание: я добавляю ** для удобства наблюдения через каждые 5 строк.

Ответы [ 2 ]

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

enter image description here

Возможно, причина ошибки, потому что информация в моем столбце "Место" выглядит следующим образом.

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

Используйте .join в совокупном словаре:

d = {'DateTime':'last', 'Value':'mean', 'Place':', '.join, 'Product':', '.join}
new_df = df[:(len(df)//5)*5].groupby(df[:(len(df)//5)*5].index // 5).agg(d)
print (new_df)
    DateTime   Value                          Place        Product
0 2018-12-07  2.5372  601, 601/14, 601, 601, 601/15  A, B, C, D, E
1 2018-07-14  2.2926     601, 601/12, 601, 602, 602  F, G, H, I, J
2 2018-07-15  1.9394  602, 602/11, 603/10, 603, 603  K, L, M, N, O

Но если хотите фильтрации в статистической функции:

def f(x):
    a = x['DateTime'].iloc[-1]
    b = x['Value'].mean()

    x = x[x['Product'].isin(['A','C','E','F','G','L','M','N', 'O'])]
    c = ', '.join(x['Place'])
    d = ', '.join(x['Product'])
    return pd.Series([a,b,c,d], index=['DateTime','Value','Place','Product'])

new_df = df[:(len(df)//5)*5].groupby(df[:(len(df)//5)*5].index // 5).apply(f)
print (new_df)
    DateTime   Value                     Place     Product
0 2018-12-07  2.5372          601, 601, 601/15     A, C, E
1 2018-07-14  2.2926               601, 601/12        F, G
2 2018-07-15  1.9394  602/11, 603/10, 603, 603  L, M, N, O
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...