我有一个如下定义的函数:
def process_trans(chunk):
grouped_object=chunk.groupby('msno',sort=False) # not sorting results in a minor speedup
func = {
'late_count':['sum'],
'is_discount':['count'],
'is_not_discount':['count'],
'discount':['sum'], 'is_auto_renew':['mean'], 'is_cancel':['mean'], 'payment_type' : ['??'}
result=grouped_object.agg(func)
return result
如您所见,我知道我可以为每列插入sum
,count
,mean
。我可以插入哪种类型的关键字来确定最常出现的payment_type
。请注意,每种类型都由整数表示。
我看到人们正在介绍mode
,但需要索引0来识别最常用的项目。还有更好的主意吗?
答案 0 :(得分:1)
我认为您需要value_counts
并选择index
的第一个值,因为函数返回已排序Series
:
'payment_type' : lambda x: x.value_counts().index[0]
样本中的所有内容:
chunk = pd.DataFrame({'msno':list('aaaddd'),
'late_count':[4,5,4,5,5,4],
'is_discount':[7,8,9,4,2,3],
'is_not_discount':[4,5,4,5,5,4],
'discount':[7,8,9,4,2,3],
'is_auto_renew':[1,3,5,7,1,0],
'is_cancel':[5,3,6,9,2,4],
'payment_type':[1,0,0,1,1,0]})
print (chunk)
discount is_auto_renew is_cancel is_discount is_not_discount \
0 7 1 5 7 4
1 8 3 3 8 5
2 9 5 6 9 4
3 4 7 9 4 5
4 2 1 2 2 5
5 3 0 4 3 4
late_count msno payment_type
0 4 a 1
1 5 a 0
2 4 a 0
3 5 d 1
4 5 d 1
5 4 d 0
grouped_object=chunk.groupby('msno',sort=False)
func = {
'late_count':['sum'],
'is_discount':['count'],
'is_not_discount':['count'],
'discount':['sum'],
'is_auto_renew':['mean'],
'is_cancel':['mean'],
'payment_type' : [lambda x: x.value_counts().index[0]]}
result=grouped_object.agg(func)
print (result)
is_not_discount is_discount is_cancel discount late_count is_auto_renew \
count count mean sum sum mean
msno
a 3 3 4.666667 24 13 3.000000
d 3 3 5.000000 9 14 2.666667
payment_type
<lambda>
msno
a 0
d 1
答案 1 :(得分:1)
您可以使用series.mode
即
func = {
'late_count':['sum'],
'is_discount':['count'],
'is_not_discount':['count'],
'discount':['sum'], 'is_auto_renew':['mean'], 'is_cancel':['mean'],
'payment_type': lambda x : x.mode()}
# Data from @ jezrael.
grouped_object.agg(func).rename(columns={'<lambda>': 'mode'})
输出:
is_not_discount is_auto_renew late_count payment_type discount \
count mean sum mode sum
msno
a 3 3.000000 13 0 24
d 3 2.666667 14 1 9
is_discount is_cancel
count mean
msno
a 3 4.666667
d 3 5.000000