Python 从两个日期列中去掉月份
我有一个熊猫数据框,它有合同的开始和结束日期以及数量。我将如何剔除单个月份,以便将其汇总和绘制Python 从两个日期列中去掉月份,python,python-2.7,date,pandas,Python,Python 2.7,Date,Pandas,我有一个熊猫数据框,它有合同的开始和结束日期以及数量。我将如何剔除单个月份,以便将其汇总和绘制 ex Start Date End Date Demanded Customer 1/1/2017 3/31/2017 100 A 2/1/2017 3/31/2017 50 B 去掉接下来的几个月 Month Demand Customer 1/1/2017 10
ex
Start Date End Date Demanded Customer
1/1/2017 3/31/2017 100 A
2/1/2017 3/31/2017 50 B
去掉接下来的几个月
Month Demand Customer
1/1/2017 100 A
2/1/2017 100 A
3/1/2017 100 A
2/1/2017 50 B
3/1/2017 50 B
最终的结果是将其作为轴心,然后在x轴上绘制月份图,在y轴上绘制总需求图。您可以首先将列转换为日期。然后使用频率为MS(月初)的和来创建新的扩展数据帧。最后原始列
需求量
和客户
:
df['Start_Date'] = pd.to_datetime(df['Start Date'])
df['End_Date'] = pd.to_datetime(df['End Date'])
df1 = pd.concat([pd.Series(r.Index,
pd.date_range(r.Start_Date, r.End_Date, freq='MS'))
for r in df.itertuples()])
.reset_index()
df1.columns = ['Month','idx']
print (df1)
Month idx
0 2017-01-01 0
1 2017-02-01 0
2 2017-03-01 0
3 2017-02-01 1
4 2017-03-01 1
df2 = df1.set_index('idx').join(df[['Quantity Demanded','Customer']]).reset_index(drop=True)
print (df2)
Month Quantity Demanded Customer
0 2017-01-01 100 A
1 2017-02-01 100 A
2 2017-03-01 100 A
3 2017-02-01 50 B
4 2017-03-01 50 B
使用
melt
然后重新采样('MS')
当我尝试此操作时,列名没有设置。出现了什么问题?有不同的列名?df1.columns=['Month','idx']不起作用/不适用。在.reset_index()之后,df1的值是相同的-我得到一个缩进错误,所以我只是将其更改为d1.reset_index()-然后当我运行df1.columns=['Month','idx']时,它似乎没有任何效果。是因为df1是一个系列吗?(猜测一下)您可以在df.itertuples()中为r使用一行,如
df1=pd.concat([pd.Series(r.Index,pd.date\u range(r.Start\u date,r.End\u date,freq='MS'))。reset\u Index()
df['Start Date'] = pd.to_datetime(df['Start Date'])
df['End Date'] = pd.to_datetime(df['End Date'])
d1 = pd.melt(
df, ['Demanded', 'Customer'],
['Start Date', 'End Date'],
value_name='Date'
).drop('variable', 1).set_index('Date')
d1.groupby('Customer').apply(lambda df: df.resample('MS').ffill()) \
.reset_index(0, drop=True) \
.reset_index()
Date Demanded Customer
0 2017-01-01 100 A
1 2017-02-01 100 A
2 2017-03-01 100 A
3 2017-02-01 50 B
4 2017-03-01 50 B