2016-03-03 79 views
1

我有一個pd.dataframe,看起來像下面獲取數據到每月的日期時間指數

Start Date End Date 
1/1/1990  7/1/2014 
7/1/2005  5/1/2013 
8/1/1997  8/1/2004 
9/1/2001  

一個我想捕捉到這一數據,其中它顯示的許多項目是如何開始,而是由某些月份結束,在日期時間索引。我想要它的樣子如下所示。

Date  Count 
4/1/2013  3 
5/1/2013  2 
6/1/2013  2 
7/1/2013  2 

到目前爲止,我已經創作了一系列創建一個字符串相結合的開始和結束日期,並總結了相同的開始和結束日期的所有項目。

1/1/19007/1/2014 1 
7/1/20055/1/2013 1 
8/1/19978/1/2004 1 
9/1/2001   1 

而且我與datetimeindex看作爲一個數據幀如下:

4/1/2013 
5/1/2013 
6/1/2013 
7/1/2013 

現在,我奮力把二者結合起來得到什麼我要找的。我可能在想這些都是錯誤的,並且正在尋找更好的想法。

+0

不知道你正在嘗試做的,而是深入到大熊貓文檔,它不應該是很難。如果你第一次轉換爲日期時間(pd.to_datetime),那麼你可以簡單地減去它們來獲得時間變化量。不要組合表示日期的字符串!你可以用'dt.month'等來訪問月份。 – JohnE

+0

好的,謝謝。我會繼續搜索。 – Milhouse

回答

1

你可以試試:

print df1 
    Start Date End Date 
0 1/1/1990 7/1/2014 
1 7/1/2005 5/1/2013 
2 8/1/1997 8/1/2004 
3 9/1/2001  NaN 

print df2 
Index: [4/1/2013, 5/1/2013, 6/1/2013, 7/1/2013] 

#drop NaT in columns Start Date, End Date 
df1 = df1.dropna(subset=['Start Date','End Date']) 

#convert columns to datetime and then to month period 
df1['Start Date'] = pd.to_datetime(df1['Start Date']).dt.to_period('M') 
df1['End Date'] = pd.to_datetime(df1['End Date']).dt.to_period('M') 

#create new column from datetimeindex and convert it to month period 
df2['Date'] = pd.DatetimeIndex(df2.index).to_period('M') 
print df1 
    Start Date End Date 
0 1990-01 2014-07 
1 2005-07 2013-05 
2 1997-08 2004-08 
print df2 
      Date 
Date    
4/1/2013 2013-04 
5/1/2013 2013-05 
6/1/2013 2013-06 
7/1/2013 2013-07 
#stack data for resampling 
df1 = df1.stack().reset_index(drop=True, level=1).reset_index(name='Date') 
print df1 
    index Date 
0  0 1990-01 
1  0 2014-07 
2  1 2005-07 
3  1 2013-05 
4  2 1997-08 
5  2 2004-08 

#resample by column index 
df = df1.groupby(df1['index']).apply(lambda x: x.set_index('Date').resample('1M', how='first')).reset_index(level=1) 
#remove unecessary column index 
df = df.drop('index', axis=1) 
print df.head() 
     Date 
index   
0  1990-01 
0  1990-02 
0  1990-03 
0  1990-04 
0  1990-05 

#merge df and df2 by column Date, groupby by Date and count 
print pd.merge(df, df2, on='Date').groupby('Date')['Date'].count() 
Date 
2013-04 2 
2013-05 2 
2013-06 1 
2013-07 1 
Freq: M, Name: Date, dtype: int64 
+0

正是我在找的東西。非常感謝。我正在使用groupby,並嘗試了幾次堆棧,但無法弄清楚如何讓它一起工作。 – Milhouse

相關問題