gpt4 book ai didi

python - Pandas Dataframe Groupby 多列然后求和

转载 作者:太空宇宙 更新时间:2023-11-04 05:45:49 24 4
gpt4 key购买 nike

假设每个 Python 代码如下:

import pandas as pd
import numpy as np

在 Pandas 中,如果我有一个包含 2 列的数据框,其中一列是数字数组,我可以对数组的值求和以获得单个数组。

df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar'], 'numbers' : [np.array([1, 2, 3, 4]),np.array([2, 4, 2, 4]),np.array([2, 3, 4, 5]),np.array([1, 3, 5, 7])]} )
df['arrays'].sum()

我什至可以按第一列分组,然后对第二列求和以获得每组的总和:

grpA = df.groupby('A')
grpA.sum()

但是,如果除了数组列之外我还有多个其他列,比如说 2 个其他列,那么在尝试按前两列分组并求和时,我会得到一个 ValueError: Function does not reduce数组列:

df2 = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar'],'B': ['la', 'la', 'al', 'al'],'numbers' : [np.array([1, 2, 3, 4]),np.array([2, 4, 2, 4]),np.array([2, 3, 4, 5]),np.array([1, 3, 5, 7])]} )
grpAB = df2.groupby(['A','B'])
grpAB.sum()

在 SQL 中,如果我可以对数组求和,则以下内容将起作用:

select A, B, sum(numbers)
from df2
group by A, B

有没有办法成功地按多列分组并对 Pandas 中的最后一个数组列求和?

最佳答案

您可以使用 lambda 表达式。 iat 表达式获取系列中第一个元素的标量值(这里只是数字列表),然后对结果求和。

>>> df2.groupby(['A', 'B']).numbers.apply(lambda x: x.iat[0].sum())

A B
bar al 16
la 12
foo al 14
la 10
Name: numbers, dtype: int64

关于python - Pandas Dataframe Groupby 多列然后求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32363098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com