2014-02-18 19 views
0

我想使用熊猫进行简单的产品生命周期分析,但我无法弄清楚如何计算每种产品的第一个购买年份。例如:使用熊猫计算产品生命周期分析的首日期

import pandas as pd 

purchases = pd.DataFrame( { 
'Product Code': ['web200', 'web200', 'web306', 'web492', 'web306', 'web492', 'web492', 'audio700',  
'audio695', 'web200', 'web492', 'audio700', 'audio695'], 
'Purchase Date': ['1/7/2004', '2/2/2003', '5/20/2004', '8/12/2006', '6/17/2005', '5/3/2004', 
'10/12/2006', '8/2/2008', '9/13/2007', '10/1/2005', '4/9/2006', '8/12/2005', '3/12/2004'], 
'Product Type': ['webinar', 'webinar', 'webinar', 'webinar', 'webinar', 'webinar', 'webinar', 
'books on tape', 'books on tape', 'webinar', 'webinar', 'books on tape', 'books on tape'] 
}) 

我想创建2列:

purchases['Product First Purchase Year'] 
purchases['Product Lifecycle Year'] 

使第一行,产品首次购买年份= 2003,产品生命周期年份= 2

怎么办我在不使用循环的情况下计算产品第一购买年份?我确定其他人之前也提过类似的问题,但我显然没有使用正确的搜索词,因为我没有找到它。我正在使用熊猫v0.13.1。

回答

1

这可能是你在找什么:

purchases['Product First Purchase Year'] = purchases['Purchase Date'].apply(lambda s: int(s.split('/')[2])) 
purchases['Product Lifecycle Year'] = purchases.groupby('Product Code')['Product First Purchase Year'].transform(lambda s: s.max() - s.min()) 

这给:

Product Code Product Type Purchase Date Product First Purchase Year Product Lifecycle Year 
0  web200  webinar  1/7/2004       2004      2 
1  web200  webinar  2/2/2003       2003      2 
2  web306  webinar  5/20/2004       2004      1 
3  web492  webinar  8/12/2006       2006      2 
4  web306  webinar  6/17/2005       2005      1 
5  web492  webinar  5/3/2004       2004      2 
6  web492  webinar 10/12/2006       2006      2 
7  audio700 books on tape  8/2/2008       2008      3 
8  audio695 books on tape  9/13/2007       2007      3 
9  web200  webinar  10/1/2005       2005      2 
10  web492  webinar  4/9/2006       2006      2 
11  audio700 books on tape  8/12/2005       2005      3 
12  audio695 books on tape  3/12/2004       2004      3 

注:

  1. 使用列名不能包含空格使得引用它们 容易
  2. “Python for Data Ana裂解”,韦斯麦金尼是与熊猫
  3. 开始一个伟大的书这里列出的食谱是有用的 - http://pandas.pydata.org/pandas-docs/stable/cookbook.html
+0

差不多!产品第一购买年是购买产品的第一年,产品生命周期年是购买日期年 - 产品第一购买年+ 1.抱歉,我的问题没有更清楚。但是,由于您的代码,我现在知道变换是我需要使用的方法。非常感谢你的帮助! –

+0

这是我的第一个堆栈溢出问题,在礼仪上如此不清楚。如果你的答案几乎就在那里,我是否可以编辑它,你或者没有关系?你是如何让你的输出表排队的?当我点击“编辑”来抓取降价并将其复制到文本编辑器时,它的格式不正确。 –