我如何把一系列(如)的结果Pandasgroupby.apply应用(f) 到数据帧的新列中?

2024-04-23 19:54:49 发布

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

我有一个数据帧,我想计算统计数据(值、计数、模式、平均值等),然后将结果放入一个新的列中。我目前的解决方案是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应用(λx:len(x))


Tags: 数据方法importdflenasnpresult
1条回答
网友
1楼 · 发布于 2024-04-23 19:54:49

要使用^{}

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对齐的序列,这样就可以将其作为列添加

相关问题 更多 >