Python dataframe从上一行和groupby月、年获取值

Python dataframe从上一行和groupby月、年获取值,python,pandas,dataframe,pandas-groupby,python-datetime,Python,Pandas,Dataframe,Pandas Groupby,Python Datetime,我已经完成了获取数据帧中前一行值的分组 groupby_result = df.groupby([df['DateAssigned'].dt.strftime('%m').rename('Month')]).agg({'count'}).cumsum().reset_index() 上面几行给了我这样的结果 Month DateAssigned DateCompleted 05 1 0 06 18

我已经完成了获取数据帧中前一行值的分组

groupby_result = df.groupby([df['DateAssigned'].dt.strftime('%m').rename('Month')]).agg({'count'}).cumsum().reset_index()
上面几行给了我这样的结果

 Month   DateAssigned  DateCompleted        
  05        1             0

  06        18            4
因此,代码将获取仅存在的月份的累积值。我希望累积值被结转,即使一个月没有记录

我的预期结果:

Month   DateAssigned   DateCompleted   diff
05            1             0           0
06           18             4           17
07           18             4           0
08           20             4           2
第四栏的差异只是为了更好地解释问题

让我解释一下我的要求——第7个月没有任何价值,但它应该从前一个月的第6个月获得价值,并将价值结转到第8个月

参考数据框:

DateAssigned DateCompleted month

2020-06-18    2020-06-19  2020-06-18
2020-06-18           NaT  2020-06-18
2020-06-19           NaT  2020-06-19
2020-06-18    2020-06-18  2020-06-18
2020-06-23           NaT  2020-06-23
2020-06-04           NaT  2020-06-04      
2020-06-18           NaT  2020-06-18
2020-06-18    2020-06-18  2020-06-18
2020-06-05           NaT  2020-06-05
2020-06-18    2020-06-18  2020-06-18
2020-06-05           NaT  2020-06-05
2020-06-05           NaT  2020-06-05
2020-06-17           NaT  2020-06-17
2020-06-18           NaT  2020-06-18
2020-06-17           NaT  2020-06-17
2020-06-18           NaT  2020-06-18
2020-06-04           NaT  2020-06-04
2020-06-05           NaT  2020-06-05

尝试使用ffill方法。如果之前的值为空或NaN,则此操作将前向填充这些值

df.fillna(method='ffill')

应该这样做,使用适当的索引使其适应实际的数据帧

df.groupby(df["DateAssigned"].dt.month.rename("Month")).count().cumsum().reindex([5,6,7,8]).ffill().reset_index()

对分组和计数的DFs使用“shift”计算差异。输出示例是我创建的任意结果,您可以用自己的结果替换它

df["DateAssigned"] = pd.to_datetime(df["DateAssigned"])
df["DateCompleted"] = pd.to_datetime(df["DateCompleted"])
df = df.groupby(df["DateAssigned"].dt.month.rename("Month")).count()
df['diff'] = df['DateAssigned']-df['DateAssigned'].shift()

df

DateAssigned    DateCompleted   month   diff
Month               
5       1   0   1   NaN
6       18  4   18  17.0
7       9   2   9   -9.0
8       12  2   12  3.0

你能为dfHello,@NarendraPrasath提供样本数据吗?我已经根据你的请求添加了数据帧…我的对齐能力非常好!谢谢……正如您所说,fillna用于将数据帧的某一行或某一列中的值填充为NaN或零。我在寻找groupby之后失踪的一个月。我很欣赏你的想法。这是一个非常好的答案,但是当某个月甚至没有任何价值的时候,它是如何工作的呢?无论如何,我很感激你的回答。感谢您此代码按存在的月份对它们进行分组,因此即使没有特定月份,您也可以对它们进行聚合。我了解mate,我在这里想要的是,即使特定月份没有任何值,它也应该从上个月获得值,并将值传递到下个月。你可以参考我的预期结果部分,我试过你的解决方案。如果我重新编制索引,我得到的是NaN,这是所有列所期望的months@SivakumarTG将列转换为datetime后,在这里工作正常,您确定共享了实际数据帧的摘录吗?这将是伟大的,如果它将包括从几个月的项目,所以有一个明确的结果,你想复制只有6月的时刻,我非常抱歉,兄弟。你的解决方案是对的,我是罪魁祸首。你的解决方案解决了我的问题。谢谢