除了在Pandas中对列进行分组之外,是否可以在 Dataframe 中对列中具有值的行进行分组?

jk9hmnmh  于 2023-02-02  发布在  其他
关注(0)|答案(1)|浏览(167)

我尝试了很多,但找不到一种方法来做到以下几点,甚至我不确定这是否可能在Pandas。

假设我有一个类似于(1)的 Dataframe ,当我在“col-a”上使用dataframe.groupby()时,我得到(2),我可以像往常一样处理groupby Dataframe ,例如通过应用一个函数。
在处理之前,是否可以像(3)中那样对 Dataframe 进行分组(在Col-x处具有“1”的行将被包括在具有条件或某事的group 2中......),或者是否可以应用函数以在处理时将属于group 1的行包括在group 2中。
谢谢大家的关注。
最后一个请求,也可能是最重要的一个:),虽然我开始学习Pandas有一段时间了,作为一个退休的软件开发人员,我仍然很难理解它的内部机制。请PandasMaven建议我一个文件,书籍,方法或其他资源来学习Pandas的基本原则好吧,因为,我真的很喜欢它。

a5g8bdjr

a5g8bdjr1#

groupby可以使用一个定义的函数来选择组。该函数可以以任何方式组合列值。要使用您的示例,可以按照以下方式进行操作:

df = pd.DataFrame({ 'col_a': ['a', 'a', 'a', 'a', 'a', 'a', 'b', 'b','b','b','b','b'],
                    'col_x': [0,0,0,0,0,1,0,0,0,0,0,0],
                    'col_calc': [1,1,1,1,1,99,1,1,1,1,1,1]
                    })

def func(mdf, idx, col1, col2):
    x = mdf[col1].loc[idx]
    y = mdf[col2].loc[idx]
    if x == 'a' and y == 0:
        return 'g1'
    if x == 'b' or y == 1:
        return 'g2'
    
df2 = df.groupby(lambda x: func(df, x, 'col_a', 'col_x'))['col_calc'].sum()
                 
print(df2)

其给出:

g1      5
g2    105

相关问题