python3使用groupby().sum()进行数字列的加和统计,但打印结果出现了非数字列

在pycharm中执行以下代码:

df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
                   'C': np.random.randn(8),
                   'D': np.random.randn(8),
                   'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three']})

print(df.groupby('A').sum())

打印出来的是:

img


B列不是数字, 统计sum的时候应该会被排除掉,但打印结果为什么会包含B列?

引用 皆我百晓生 小程序回复内容作答:
groupby().sum()函数会将所有的列进行加和统计,不仅限于数字列。无论是数字列还是非数字列,都会被包括在结果中进行统计。若想排除非数字列进行加和统计,可以先选择只包括数字列的子集,然后再进行sum()操作。以下是修改后的代码:

df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
                   'C': np.random.randn(8),
                   'D': np.random.randn(8),
                   'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three']})

# 选择只包括数字列的子集
numeric_df = df.select_dtypes(include=[np.number])

# 进行加和统计
print(numeric_df.groupby('A').sum())

运行以上代码,打印结果会排除非数字列B,只统计数字列C和D的和。

不会排除的,如果你不想要,那就不要打印就好。以下语句都可以
print(df.groupby('A').sum(['C','D']))
print(df.groupby('A').sum()['C', 'D'])

groupby().sum()的确会对字串字段进行统计(因为字串也可相加的)
你要手动筛选你要的结果

print(df.groupby('A')[['C','D']].sum())

或只对数统计

print(df.groupby('A').sum(numeric_only=True))