I have a following dataFrame
mn = pd.DataFrame({'fld1': [2.23, 4.45, 7.87, 9.02, 8.85, 3.32, 5.55],'fld2': [125000, 350000,700000, 800000, 200000, 600000, 500000],'lType': ['typ1','typ2','typ3','typ1','typ3','typ1','typ2'], 'counter': [100,200,300,400,500,600,700]})
映射函数
def getTag(rangeAttribute):
sliceDef = {'tag1': [1, 4], 'tag2': [4, 6], 'tag3': [6, 9],
'tag4': [9, 99]}
for sl in sliceDef.keys():
bounds = sliceDef[sl]
if ((float(rangeAttribute) >= float(bounds[0]))
and (float(rangeAttribute) <= float(bounds[1]))):
return sl
def getTag1(rangeAttribute):
sliceDef = {'100-150': [100000, 150000],
'150-650': [150000, 650000],
'650-5M': [650000, 5000000]}
for sl in sliceDef.keys():
bounds = sliceDef[sl]
if ((float(rangeAttribute) >= float(bounds[0]))
and (float(rangeAttribute) <= float(bounds[1]))):
return sl
我希望根据fld1和fld2的标签计算总和。 目前,我必须编写不同的函数,并使用硬编码的值来处理不同类型的字段。MAP函数只接受一个参数。除了MAP之外,还有哪些函数可以将sliceDef作为输入参数。
mn.groupby([mn['fld1'].map(getTag),mn['fld2'].map(getTag1),'lType'] ).sum()
apply
并设置axis=1
,例如mn.apply(lambda row: getTag(row), axis=1)
。在getTag
中,您可以这样选择列:row['fld1']
和row['fld2']
。这应该可以实现您想要的功能。 - EdChumpd.cut
感兴趣,例如pd.cut(mn.fld1, [1, 4, 6, 9, 99], right=False)
。虽然它的形式不完全与你所寻找的相同,但在我的经验中它非常方便。 - DSM