pandas 相当于Stata崩溃的lastnm

pandas equivalent of Stata collapse lastnm

我正在尝试在 pandas 中复制 Stata 的 collapse (lastnm) 函数。考虑以下最小示例:

import pandas as pd, numpy as np
df = (pd.DataFrame({"group": [1,1,1,1,1,2,2,2,2,2],
                "period":[1,1,2,2,2,1,1,2,2,2],
                "value1": [2,np.NaN,7,8,np.NaN,1,5,4,6,np.NaN],
                "value2": [1,3,np.NaN, 8,np.NaN,1,5,4,6,np.NaN]}))

期望的输出:

collapsed_df = (pd.DataFrame({"group":[1,1,2,2],
                              "period":[1,2,1,2],
                              "value1":[2,8,5,6],
                              "value2":[3,8,5,6]}))

基本上是这样的:

collapsed_df = df.groupby(["group", "period"])["value1","value2"].last()

但是如果最后一个值确实缺失,这将给我缺失值。我想要的是

collapsed_df = df.groupby(["group", "period"])["value1","value2"].lastnm()

更新:我还没有意识到pandas默认保留最后一个非缺失值,所以问题解决了。

您可以只使用 groupby,pandas 将忽略缺失值。以下将为您提供所需的结果:

df.groupby(["group", "period"], as_index=False).last()

给出:

   group  period  value1  value2
0      1       1     2.0     3.0
1      1       2     8.0     8.0
2      2       1     5.0     5.0
3      2       2     6.0     6.0