假设我有以下数据框:
df = pd.DataFrame({"id": [1, 1, 1, 2, 2, 2, 3, 3, 3, 3], "date": [pd.Timestamp(2002, 2, 2), pd.Timestamp(2003, 3, 3), pd.Timestamp(2004, 4, 4), pd.Timestamp(2005, 5, 5), pd.Timestamp(2006, 6, 6), pd.Timestamp(2007, 7, 7), pd.Timestamp(2008, 8, 8), pd.Timestamp(2009, 9, 9), pd.Timestamp(2010, 10, 10), pd.Timestamp(2011, 11, 11)], "numeric": [0.9, 0.4, 0.2, 0.6, np.nan, 0.8, 0.7, np.nan, np.nan, 0.5], "nominal": [0, 1, 0, 1, 0, 0, 0, 1, 1, 1]})
我想要实现的是在每个组的末尾id
去除行(假设行按 分组),这样这些行将被删除,直到non-nan
该numeric
列出现一个值。此外,每个组的最后一行将始终具有non-nan
该numeric
列的值,并且应始终删除最后一行。因此,生成的数据帧是:
result_df = pd.DataFrame({"id": [1, 1, 2, 3], "date": [pd.Timestamp(2002, 2, 2), pd.Timestamp(2003, 3, 3), pd.Timestamp(2005, 5, 5), pd.Timestamp(2008, 8, 8)], "numeric": [0.9, 0.4, 0.6, 0.7], "nominal": [0, 1, 1, 0]})
关于我们如何获得结果数据帧的更多解释:
因为id == 1
只有最后一行被删除,因为在最后一行之前的行中有该numeric
列的值。
对于id == 2
最后两行被删除,因为最后一行默认情况下,该行的最后一个具有前去除nan
值。
对于id == 3
被删除的最后三个行,因为最后一行是默认和第一去除non-nan
值从低于第四行计数。
此外,我目前正在做的是:
df.groupby("id", as_index=False).apply(lambda x: x.iloc[:-1]).reset_index(drop=True)
但是,这只会删除每个组的最后一行,我想N
根据上面解释的条件删除最后一行。
如果您需要任何进一步的信息,请告诉我,并期待您的回答!
心有法竹
相关分类