Pandas Dataframe Transformations - PullRequest
       15

Pandas Dataframe Transformations

0 голосов
/ 30 октября 2018

Рассмотрим кадр данных, который выглядит следующим образом:

             A        B        C
0   2018-10-13      100       50
1   2018-10-13      200       25
2   2018-10-13      300       10
3   2018-10-13      400        5
4   2018-10-13      500        0
5   2018-10-14      100      100
6   2018-10-14      200       50
7   2018-10-14      300       25
8   2018-10-14      400       10
9   2018-10-14      500        5
10  2018-10-15      100      150
11  2018-10-15      200      100
12  2018-10-15      300       50
13  2018-10-15      400       25
14  2018-10-15      500       10

Вот преобразование, которое я хочу выполнить:

  1. GroupBy Колонка A
  2. Затем столбец B группы GroupBy делится на 3 интервала ([0,100] скажем, intval-1 , [101,200], скажем intval-2 , [201, конец], скажите intval- 3 ]. Может быть n интервалов для обобщения.
  3. Выполнить агрегирование суммы в столбце C

Таким образом, мой преобразованный / развернутый информационный кадр должен выглядеть примерно так:

             A  intval-1  intval-2  intval-3
0   2018-10-13        50        25        15
1   2018-10-14       100        50        40
2   2018-10-13       150       100        85

Простой способ реализовать это был бы отличным помощником.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Использование pd.cut с groupby + unstack

df.B=pd.cut(df.B,bins=[0,100,200,np.inf],labels=['intval-1','intval-2','intval-3'])
df.groupby(['A','B']).C.sum().unstack()
Out[35]: 
B           intval-1  intval-2  intval-3
A                                       
2018-10-13        50        25        15
2018-10-14       100        50        40
2018-10-15       150       100        85
0 голосов
/ 30 октября 2018

Вы можете cut, затем pivot_table:

bin_lst = [0, 100, 200, np.inf]

cut_b = pd.cut(df['B'], bins=bin_lst,
               labels=[f'intval-{i}' for i in range(1, len(bin_lst))])

res = df.assign(B=cut_b)\
        .pivot_table(index='A', columns='B', values='C', aggfunc='sum')

print(res)

B           intval-1  intval-2  intval-3
A                                       
2018-10-13        50        25        15
2018-10-14       100        50        40
2018-10-15       150       100        85
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...