在pandas中使用groupby和变换时保持'key'列

use*_*699 9 python pandas

查找规范化的数据帧将删除用于分组的列,以便它不能在后续的groupby操作中使用.例如(编辑:更新):

    df = pd.DataFrame({'a':[1, 1 , 2, 3, 2, 3], 'b':[0, 1, 2, 3, 4, 5]})

       a  b
    0  1  0
    1  1  1
    2  2  2
    3  3  3
    4  2  4
    5  3  5

    df.groupby('a').transform(lambda x: x)

       b
    0  0
    1  1
    2  2
    3  3
    4  4
    5  5
Run Code Online (Sandbox Code Playgroud)

现在,对于组中的大多数操作,"缺失"列变为新索引(然后可以使用reset_index或设置进行调整as_index=False),但是当使用变换时,它会消失,留下原始索引和没有密钥的新数据集.

编辑:这是我希望能够做到的一个内容

    df.groupby('a').transform(lambda x: x+1).groupby('a').mean()
    KeyError 'a'
Run Code Online (Sandbox Code Playgroud)

pandas docs的示例中,使用函数根据索引进行拆分,这似乎完全避免了这个问题.或者,总是可以在groupby/transform之后添加列,但肯定有更好的方法吗?

更新:看起来reset_index/as_index仅适用于将每个组缩减为单个行的函数.从答案来看,似乎有几种选择

Pep*_*acz 8

这个问题也在这里讨论。

返回的对象与原始 df 具有相同的索引,因此您可以执行

pd.concat([
    df['a'],
    df.groupby('a').transform(lambda x: x)
], axis=1)
Run Code Online (Sandbox Code Playgroud)


piR*_*red 2

太奇怪了!

我是这样欺骗它的

df.groupby(df.a.values).transform(lambda x: x)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述