如何修改分组 pandas 数据框的组

How to modify groups of a grouped pandas dataframe

我有这个数据框:

s = pd.DataFrame({'A': [*'1112222'], 'B': [*'abcdefg'], 'C': [*'ABCDEFG']})

就是这样:

    A   B   C
0   1   a   A
1   1   b   B
2   1   c   C
3   2   d   D
4   2   e   E
5   2   f   F
6   2   g   G

我想像这样进行分组:

groups = s.groupby("A")

例如第2组是:

g2 = groups.get_group("2")

看起来像这样:

    A   B   C
3   2   d   D
4   2   e   E
5   2   f   F
6   2   g   G

反正我想在每个组里做点操作

让我展示一下我的最终结果:

    A   B   C   D
1   1   b   B   a=b;A=B
2   1   c   C   a=c;A=C
4   2   e   E   d=e;D=E
5   2   f   F   d=f;F=F
6   2   g   G   d=g;D=G

实际上,我删除了每个组中的第一行,但将其与组中的其他行组合以创建列 C

知道怎么做吗?

用两行总结我想做的事情: 我想做一个分组,在每个组中,我想删除第一行。我还想向基于组行的整个数据框添加一列


我试过的:

为了解决这个问题,我将创建一个函数:

def func(g):
    first_row_of_group = g.iloc[0]
    g = g.iloc[1:]
    g["C"] = g.apply(lambda row: ";".join([f'{a}={b}' for a, b in zip(row, first_row_of_group)]))
    return g

那我要这样做:

groups.apply(lambda g: func(g))

您可以对每个组应用自定义函数,将第一行的元素添加到其余行并将其删除:

def remove_first(x):
    first = x.iloc[0]
    x = x.iloc[1:]
    x['D'] = first['B'] + '=' + x['B'] + ';' + first['C'] + '=' + x['C']
   # an equivalent operation
   # x['D'] = first.iloc[1] + '=' + x.iloc[:,1] + ';' + first.iloc[2] + '=' + x.iloc[:,2]
    return x

s = s.groupby('A').apply(remove_first).droplevel(0)

输出:

   A  B  C        D
1  1  b  B  a=b;A=B
2  1  c  C  a=c;A=C
4  2  e  E  d=e;D=E
5  2  f  F  d=f;D=F
6  2  g  G  d=g;D=G

注意:您问题中显示的数据框是从

构建的
s = pd.DataFrame({'A': [*'1112222'], 'B': [*'abcdefg'], 'C': [*'ABCDEFG']})

但是你给了一个不同的原始输入。