如何根据 pandas 数据框中的列 ID 对行进行分组?

问题描述 投票:0回答:1

我的数据框位于 df1 下方:

my dataframe

我想通过以下方式根据 ID 列对行进行分组:

expected dataframe

我怎样才能以最优化的方式做到这一点?

我尝试使用 groupby 功能,但没能得到我想要的,我很确定有一个最佳方法可以做到这一点,但现在无法弄清楚。

python-3.x pandas dataframe
1个回答
0
投票

假设空单元格为 NaN/None,您可以计算 Value 中前导空行的数量、Label 中尾随空行的数量,然后

groupby.apply
shift
向上赋值并使用 删除最后的空行
head

def cust_shift(g):
    # number of leading empty rows
    n1 = g['Value'].isna().cummin().sum()
    # number of trailing empty rows
    n2 = g.loc[::-1, 'Label'].isna().cummin().sum()
    # shift Value up and remove trailing empty rows
    return g.assign(Value=g['Value'].shift(-n1)).head(-min(n1, n2))

out = df.groupby('ID', group_keys=False)[list(df)].apply(cust_shift)

输出:

      ID Label  Value
0   id_1     A   10.0
1   id_1     B   20.0
2   id_1     C   30.0
3   id_1     D    NaN
4   id_1     E    NaN
8   id_2     F   40.0
9   id_2     G   50.0
10  id_2     H   60.0
11  id_2  None   70.0
© www.soinside.com 2019 - 2024. All rights reserved.