Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数据输入每月日期时间索引_Python_Pandas - Fatal编程技术网

Python 将数据输入每月日期时间索引

Python 将数据输入每月日期时间索引,python,pandas,Python,Pandas,我有一个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 我想在datetimeindex中捕获这些数据,其中显示了在特定月份开始但结束的项目数。我希望它看起来像什么,如下所示 Date Count 4/1/2013 3 5/1/2013 2 6/1/2013

我有一个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     
我想在datetimeindex中捕获这些数据,其中显示了在特定月份开始但结束的项目数。我希望它看起来像什么,如下所示

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
现在我正努力将两者结合起来,以得到我想要的东西。我可能认为这一切都是错误的,我在寻找更好的想法

您可以尝试:

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

不知道你想做什么,但深入研究熊猫文档,应该不会那么难。如果您首先转换为datetime(pd.to_datetime),那么您可以简单地减去它们以获得时间增量。不要组合表示日期的字符串!您可以使用
dt.month
等访问月份。好的,谢谢。我会继续找的,正是我要找的。非常感谢你。我使用的是groupby,并尝试了几次stack,但就是想不出如何让它一起工作。
#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