2014-02-18 43 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

這是我的第一個堆棧溢出問題,在禮儀上如此不清楚。如果你的答案几乎就在那裏,我是否可以編輯它,你或者沒有關係?你是如何讓你的輸出表排隊的?當我點擊「編輯」來抓取降價並將其複製到文本編輯器時,它的格式不正確。 –