Python pandas dataframe 从上一行和 groupby Months,year 获取值
Python pandas dataframe get value from previous row and groupby Months,year
我已经完成了在数据框中获取前一行值的工作。
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
第 4 列 diff 只是为了更好地解释事情
让我解释一下我的要求 - 第 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
尝试使用填充方法。如果值为空或 NaN,这将向前填充先前的值。
df.fillna(method='ffill')
这应该可以,使用适当的索引使其适应您的实际数据帧
df.groupby(df["DateAssigned"].dt.month.rename("Month")).count().cumsum().reindex([5,6,7,8]).ffill().reset_index()
使用 'shift()' 与分组和计数的 DF 计算差异。输出示例是我自己创建的任意结果,你可以自己替换。
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
我已经完成了在数据框中获取前一行值的工作。
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
第 4 列 diff 只是为了更好地解释事情
让我解释一下我的要求 - 第 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
尝试使用填充方法。如果值为空或 NaN,这将向前填充先前的值。
df.fillna(method='ffill')
这应该可以,使用适当的索引使其适应您的实际数据帧
df.groupby(df["DateAssigned"].dt.month.rename("Month")).count().cumsum().reindex([5,6,7,8]).ffill().reset_index()
使用 'shift()' 与分组和计数的 DF 计算差异。输出示例是我自己创建的任意结果,你可以自己替换。
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