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月的时刻,我非常抱歉,兄弟。你的解决方案是对的,我是罪魁祸首。你的解决方案解决了我的问题。谢谢