我有一个名为rev_df
的表格。
pcid date rep rev new_rev diff Period
0 523468 2017-01-01 1127 16.60 0 NaN 1
1 523468 2017-01-02 1127 41.32 0 1 1
2 523468 2017-01-03 4568 52.39 0 1 1
3 523468 2017-01-04 4568 47.31 0 1 2
这是引起某些问题的代码行。
rev_df_period = rev_df.groupby(['pcid', 'Period']).agg({'date': [np.min,np.max],
'rev':np.sum,
'new_prod_rev':np.sum,
'historical_sales_rep': lambda x: x.unique()
})
lambda x: x.unique()
导致以下错误:
ValueError: Function does not reduce
通过测试,我发现如果将最后一个agg lambda函数更改为.nunique()
,则不会引发错误。但是我需要唯一的rep
值的列表,而不是值的数量。
有什么想法吗?
输出应如下所示:
new_rev date rev rep
sum amin amax sum unique
pcid Period
523468 1 0 2017-01-01 2017-02-01 1026.94 [1127,4568]
2 0 2017-03-24 2017-03-30 90.00 4568
答案 0 :(得分:2)
您可以尝试以下方法:
df.groupby(['pcid', 'Period']).agg({'date': [np.min,np.max],
'rev':np.sum,
'new_rev':np.sum,
'rep': lambda x: list(set(x))
})
输出:
date rev new_rev rep
amin amax sum sum <lambda>
pcid Period
523468 1 2017-01-01 2017-01-03 110.31 0 [4568, 1127]
2 2017-01-04 2017-01-04 47.31 0 [4568]
编辑以获得正确的列命名
f = lambda x: list(set(x))
f.__name__ = 'unique'
rev_df.groupby(['pcid', 'Period']).agg({'date': [np.min,np.max],
'rev':np.sum,
'new_rev':np.sum,
'rep': f
})
输出:
date rev new_rev rep
amin amax sum sum unique
pcid Period
523468 1 2017-01-01 2017-01-03 110.31 0 [4568, 1127]
2 2017-01-04 2017-01-04 47.31 0 [4568]