luf*_*ffe 12 python pandas pandas-groupby
我有以下数据帧:
fsq digits digits_type
0 1 1 odd
1 2 1 odd
2 3 1 odd
3 11 2 even
4 22 2 even
5 101 3 odd
6 111 3 odd
Run Code Online (Sandbox Code Playgroud)
我想添加一个最后一列,count包含属于数字组的fsq 数,即:
fsq digits digits_type count
0 1 1 odd 3
1 2 1 odd 3
2 3 1 odd 3
3 11 2 even 2
4 22 2 even 2
5 101 3 odd 2
6 111 3 odd 2
Run Code Online (Sandbox Code Playgroud)
由于有3个fsq行,其数字等于1,所以2个fsq行的数字等于2,等等.
谢谢
Tom*_*ger 16
In [395]: df['count'] = df.groupby('digits')['fsq'].transform(len)
In [396]: df
Out[396]:
fsq digits digits_type count
0 1 1 odd 3
1 2 1 odd 3
2 3 1 odd 3
3 11 2 even 2
4 22 2 even 2
5 101 3 odd 2
6 111 3 odd 2
[7 rows x 4 columns]
Run Code Online (Sandbox Code Playgroud)
通常,您应该尽可能使用 Pandas 定义的方法。这通常会更有效率。
在这种情况下,您可以使用'size'
与 相同的方法df.groupby('digits')['fsq'].size()
:
df = pd.concat([df]*10000)
%timeit df.groupby('digits')['fsq'].transform('size') # 3.44 ms per loop
%timeit df.groupby('digits')['fsq'].transform(len) # 11.6 ms per loop
Run Code Online (Sandbox Code Playgroud)