【问题标题】:Chaining groupby and apply pandas链接 groupby 并应用 pandas
【发布时间】:2018-10-31 16:28:13
【问题描述】:

我正在寻找一种链接 groupby 并应用的方法,如下所示(参见下面的代码以获取具体示例):

df.groupby("a").apply(func_1).groupby("b").apply(func_2)

我猜它不起作用,因为 groupby 需要输入一个数据帧,这并不总是上面第二个 groupby 的情况(可以输入一个系列,cf 示例)。 一个解决方案可能是让第一个应用输出 func_1 的结果加上原始数据帧,但我还没有找到如何做到这一点。

我正在寻找一个通用的解决方法,而不仅仅是这个特定示例的解决方法。

示例:假设我想为 b 中的每个组计算 a 的路缘下面积,然后计算 c 中每个组的这些面积的总和。

df=pd.DataFrame({"a":np.arange(8),"b":np.repeat(np.arange(4),2),
"c":np.repeat(np.arange(2),4)})

df
   a  b  c
0  0  0  0
1  1  0  0
2  2  1  0
3  3  1  0
4  4  2  1
5  5  2  1
6  6  3  1
7  7  3  1


df.groupby("b").apply(lambda x: trapz(x["a"])).groupby("c").apply(sum)   
Traceback (most recent call last):
[...]
KeyError: 'c'


#Expected output
c
0     3.0
1    11.0


#I know that this code works, but I would like to avoid to modify 
#my dataframe :

df["result"]=list(df
    .groupby("b").apply(lambda x: trapz(x["a"]))
    .repeat(df.groupby("b").size()))
df.groupby("b").first().groupby("c").result.sum()

非常感谢任何帮助!

【问题讨论】:

  • 您能否更清楚地解释您要使用lambda x: np.cumsum(x["a"]) 函数实现的目标?或者显示您期望的输出。
  • 当您提交损坏的代码时,我们不知道哪一部分是预期的,哪一部分是错误的。你能告诉我们你期望的数字吗?

标签: python pandas pandas-groupby pandas-apply


【解决方案1】:

我想我会做这样的事情:

# your_fun is the function you want to apply
df.groupby('c').apply(lambda f: sum(f.groupby('b')['a'].apply(your_fun))

【讨论】:

    猜你喜欢
    • 2017-12-19
    • 2014-11-29
    • 2020-05-09
    • 2020-11-19
    • 2022-01-15
    • 2019-02-16
    • 2021-02-10
    • 2017-07-05
    • 1970-01-01
    相关资源
    最近更新 更多