Панды группового и макс строкового столбца - PullRequest
0 голосов
/ 16 апреля 2019

Образец DF:

df = pd.DataFrame(np.random.randint(1,10,size=(6,2)),columns = list("AB"))
df["A"] = ["1111","2222","1111","1111","2222","1111"]
df["B"] = ["20010101","20010101","20010101","20010101","20010201","20010201"]
df

OP:

     A          B       
 0  1111    20010101    
 1  2222    20010101    
 2  1111    20010101    
 3  1111    20010101    
 4  2222    20010201    
 5  1111    20010201    

Я пытаюсь найти максимальное количество транзакций, выполненных user_id за один день.

Например, для идентификатора: «1111» выполнил 3 транзакции для «200010101» и 1 транзакцию для «20010201», поэтому максимальное значение должно быть 3, в то время как идентификатор: 2222 сделал 1 транзакцию для «20010101» и 1 транзакция на "20010202", поэтому значение операции равно 1.

Ожидаемый ОП:

       MAX TRANS IN SINGLE DAY

1111      3
2222      1

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

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

Чтобы найти максимум, вам нужно groupby, unstack, max по индексу

In [1832]: df.groupby(['A', 'B'])['A'].count().unstack().max(axis=1)
Out[1832]:
A
1111    3
2222    1
dtype: int64
1 голос
/ 16 апреля 2019

Мы можем сделать groupby дважды.Сначала мы получаем количество каждого вхождения в столбце B каждого идентификатора в столбце A.Затем мы снова группируемся и получаем максимальное значение:


df2 = pd.DataFrame(df.groupby(['A', 'B'])['B'].count())\
                  .rename({'B':'MAX TRANS SINGLE DAY'}, axis=1)\
                  .reset_index()

df = df2.groupby('A', as_index=False).agg({'MAX TRANS SINGLE DAY':['max', 'min']})

print(df)
      A MAX TRANS SINGLE DAY    
                         max min
0  1111                    3   1
1  2222                    1   1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...