样本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
任何熊猫都可以实现此目的,而不是创建组并对其进行遍历。
答案 0 :(得分:2)
要找到最大值,您需要索引上的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 :(得分: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