我有一个问题,它和this question很相似,但差别太大了,不能用同样的方法来解决。。。在
我有两个数据帧,df1
和{
import pandas as pd
import numpy as np
np.random.seed(42)
names = ['jack', 'jill', 'jane', 'joe', 'ben', 'beatrice']
df1 = pd.DataFrame({'ID_a':np.random.choice(names, 20), 'ID_b':np.random.choice(names,20)})
df2 = pd.DataFrame({'ID':names})
>>> df1
ID_a ID_b
0 joe ben
1 ben jack
2 jane joe
3 ben jill
4 ben beatrice
5 jill ben
6 jane joe
7 jane jack
8 jane jack
9 ben jane
10 joe jane
11 jane jill
12 beatrice joe
13 ben joe
14 jill beatrice
15 joe beatrice
16 beatrice beatrice
17 beatrice jane
18 jill joe
19 joe joe
>>> df2
ID
0 jack
1 jill
2 jane
3 joe
4 ben
5 beatrice
我想做的是在df2
中添加一列,在df1
中的行数计数,其中给定的名称可以在列ID_a
或{
这个循环满足了我的需要,但是对于大数据帧来说效率很低,如果有人能提出一个更好的替代方案,我将非常感激:
df2['count'] = 0
for idx,row in df2.iterrows():
df2.loc[idx, 'count'] = len(df1[(df1.ID_a == row.ID) | (df1.ID_b == row.ID)])
提前谢谢!在
“要么”的部分使事情复杂化,但仍然是可行的。在
选项1
^{pr2}$既然其他用户决定把这变成一场速度竞赛,那么我的观点是:
选项2
^{3}$(原始答案)
stack
为基础或者
或者
而且
选项3}的整形与计数
^基于{
选项4
concat
+mask
通过使用
get_dummies
我想这应该很快。。。在
^{pr2}$下面是几种基于
numpy
数组的方法。以下为基准。在重要:对这些结果持保留态度。请记住,性能取决于您的数据、环境和硬件。在您的选择中,您还应该考虑可读性/适应性。在
分类数据:分类数据在
jp2
中的卓越性能(即通过内部字典式结构将字符串分解为整数)是与数据相关的,但如果它有效,它应该适用于以下所有算法,具有良好的性能和内存优势。在设置
^{pr2}$相关问题 更多 >
编程相关推荐