gpt4 book ai didi

python - 如何将 pandas groupby.apply(f) 的结果系列(例如)放入数据框的新列中?

转载 作者:太空宇宙 更新时间:2023-11-04 03:33:14 25 4
gpt4 key购买 nike

我有一个数据框,我想计算(value_count、模式、平均值等)的统计信息,然后将结果放入一个新列中。我当前的解决方案是 O(n**2) 左右,而且我确信可能有一种我忽略的更快、更明显的方法。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(10, size=(100, 10)),
columns = list('abcdefghij'))

df['result'] = 0

groups = df.groupby([df.i, df.j])
for g in groups:
icol_eq = df.i == g[0][0]
jcol_eq = df.j == g[0][1]
i_and_j = icol_eq & jcol_eq
df['result'][i_and_j] = len(g[1])

上面的方法有效,但对于大型数据帧来说非常慢。

我试过了

df['result'] = df.groupby([df.i, df.j]).apply(len)

但是好像不行。

也没有

def f(g):
g['result'] = len(g)
return g

df.groupby([df.i, df.j]).apply(f)

我也不能合并 df.groupby.apply(lambda x: len(x)) 的结果系列

最佳答案

您想使用 transform :

In [98]:

df['result'] = df.groupby([df.i, df.j]).transform(len)
df
Out[98]:
a b c d e f g h i j result
0 6 1 3 0 1 1 4 2 8 6 6
1 1 3 9 7 5 5 3 5 4 4 1
2 1 5 0 1 8 1 4 7 3 9 1
3 6 8 6 4 6 0 8 0 6 5 6
4 7 9 7 2 8 9 9 6 0 6 7
5 3 5 5 7 2 7 7 3 2 8 3
6 5 0 4 7 5 7 5 7 9 1 5
7 3 2 5 4 3 6 8 4 2 0 3
8 2 3 0 4 8 5 7 9 7 2 2
9 1 1 3 2 3 5 6 6 5 6 1
10 3 0 2 7 1 8 1 3 5 4 3
....

transform 返回一个索引与原始 df 对齐的系列,因此您可以将其添加为列

关于python - 如何将 pandas groupby.apply(f) 的结果系列(例如)放入数据框的新列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30246548/

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