在Python中,如何按除少数列以外的所有列进行分组?

2024-04-25 14:47:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我想按几列(大约40列)进行分组,并应用聚合和。这40列是数据集的最后40列。我还没有找到一个优雅的方法来做这件事。你知道吗

我尝试按“column\u before”列之后的所有列进行分组。你知道吗

df.groupby('grouping_variable')['column_before':].sum()

TypeError: unhashable type: 'slice'

预期结果是一个数据帧,最后40列按照“grouping\u variable”聚合为一个和


Tags: 数据方法dftypeslicecolumnvariablesum
1条回答
网友
1楼 · 发布于 2024-04-25 14:47:57

您可以通过多种方式实现:

import pandas as pd


df = pd.DataFrame({
     'col_to_group': ['A', 'A', 'B', 'B', 'A'],
     'col_1': ['a', 'b', 'c', 'a', 'a'],
     'col_2': ['x', 'y', 'y', 'y','x'],
     'col_3': [.1, .2, .1, .9, .7],
     'col_4': [.1, .2, .1, .9, .7],
})


df.groupby('col_to_group')['col_3', 'col_4'].sum()

只需选择部分列列表(切片运算符):

df.groupby('col_to_group')[df.columns[3:]].sum()
df.groupby('col_to_group')[df.columns[:2:-1]].sum().iloc[:, ::-1] 

将列'col_3'的名称与iloc一起使用:

df.groupby('col_to_group')[df.loc[:, 'col_3':].columns].sum()

类似于列表选择,但有iloc

df.groupby('col_to_group')[df.iloc[:, 3:].columns].sum()
df.groupby('col_to_group')[df.iloc[:, :2:-1].columns].sum().iloc[:, ::-1] 

结果:

              col_3  col_4
col_to_group              
A               1.0    1.0
B               1.0    1.0

相关问题 更多 >