Pandas GroupBy by Element和其他一切

dvr*_*d77 7 python group-by pandas

我很难使用Pandas groupby.说我有以下内容:

df2 = pd.DataFrame({'X' : ['B', 'B', 'A', 'A', 'C'], 'Y' : [1, 2, 3, 4, 5]})
Run Code Online (Sandbox Code Playgroud)

我想做一个groupby操作来将所有A组合在一起,而不是A组合在一起,所以像这样:

df2.groupby(<something>).groups
Out[1]: {'A': [2, 3], 'not A': [0, 1, 4]}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过发送函数但无法正常工作的东西.这可能吗?

非常感谢.

Dan*_*lan 5

In [3]: df2.groupby(df2['X'] == 'A').groups
Out[3]: {False: [0, 1, 4], True: [2, 3]}
Run Code Online (Sandbox Code Playgroud)


Woo*_*ide 1

是的,groupby 操作可能是最有用的,但在我看来,文档中解释的最差。

我认为当您决定尝试使用函数来执行此操作时,您就明白了一些事情。对我来说,这是最好的方法,因为该函数是抽象的,因此如果您想改变正在做的事情但更改参数,则可以一遍又一遍地使用。Dan Allan 提供的答案绝对是我将如何进行的,也是最优雅的,但供您参考,这是您如何使用函数实现您想要做的事情。

def GroupFunc(x, df, col, Value):
    if df[col][x] == Value:
        return "Group 1" 
    else:
        return "Group 2"

DFGrouped = df2.groupby(lambda x: GroupFunc(x, df2, 'X', 'A'))
Run Code Online (Sandbox Code Playgroud)

需要理解的是,作为组键传递的任何函数都会针对每个索引值调用一次,并将返回值用作组名称。因此,在此示例中,当您调用函数 x 时,它是索引值,然后其余参数是您感兴趣的数据帧、您正在使用的列和要测试的值。

请注意,上述全部内容也可以通过使用匿名函数在一行中实现:

DFGrouped = df2.groupby(lambda x: 'Group 1' if df2.X[x] == 'A' else 'Group 2')
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助