我有一个销售表,其中包含客户,交易日期列等。我在客户列上使用groupby,然后使用agg方法获取最大日期(以获取该特定客户的最新交易日期)和最小日期(以获取他在商店进行交易的第一个日期)。
我的代码如下:
sales['transdate'] = pd.to_datetime(sales['transdate']) # Converting the transdate column from string to timestamps.
sales['custid'].groupby.transdate({'count': np.count_nonzero ,'first': np.min, 'last' : np.max})
我想知道是否可以
使用np.min / max方法计算日期之间的最小值和最大值。 还是应该使用其他一些与日期时间相关的方法?
答案 0 :(得分:1)
您应该使用groupby.agg
来应用多个聚合函数。
还请注意,使用Pandas可以通过字符串调用许多聚合函数。在这种情况下,可以使用'size'
,'min'
和'max'
。建议使用字符串,因为熊猫将字符串表示形式映射到经过测试的高效算法。
这是一个演示:
df = pd.DataFrame([['2017-01-14', 1], ['2017-12-05', 2], ['2017-06-15', 2],
['2017-03-21', 1], ['2017-04-25', 2], ['2017-02-12', 1]],
columns=['transdate', 'custid'])
df['transdate'] = pd.to_datetime(df['transdate'])
agg_dict = {'count': 'size', 'first': 'min', 'last': 'max'}
res = df.groupby('custid')['transdate'].agg(agg_dict)
print(res)
count first last
custid
1 3 2017-01-14 2017-03-21
2 3 2017-04-25 2017-12-05