熊猫groupby和字符串列的最大值

时间:2019-04-15 23:22:32

标签: pandas pandas-groupby

样本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在一天之内完成的最大交易。

例如,对于ID:“ 1111”在“ 200010101”上进行了3次交易,而在“ 20010201”上进行了1次交易,因此此处的最大值应为3,而ID:2222在“ 20010101”上进行了1次交易,而1次在“ 20010202”上进行交易,因此操作为1。

预期的操作次数:

       MAX TRANS IN SINGLE DAY

1111      3
2222      1

任何熊猫都可以实现此目的,而不是创建组并对其进行遍历。

2 个答案:

答案 0 :(得分:2)

要找到最大值,您需要索引上的groupbyunstackmax

In [1832]: df.groupby(['A', 'B'])['A'].count().unstack().max(axis=1)
Out[1832]:
A
1111    3
2222    1
dtype: int64

答案 1 :(得分:1)

我们可以做两次groupby。首先,我们在列B中的每个ID的列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