【发布时间】:2020-10-12 07:21:18
【问题描述】:
如何在具有大量行的数据框中查找与指定列具有相同值的列的计数。
比如下面的df有
df = pd.DataFrame(np.random.randint(0,10,size=(5, 4)), columns=list('ABCD'))
df.index.name = 'id'
A B C D
id
0 7 6 6 2
1 6 5 3 5
2 8 8 0 9
3 0 2 8 9
4 4 3 8 5
bc_cols = ['B', 'C']
df['max'] = df[bc_cols].max(axis=1)
A B C D BC_max
id
0 7 6 6 2 6
1 6 5 3 5 5
2 8 8 0 9 8
3 0 2 8 9 8
4 4 3 8 5 8
对于每一行,我们想要获取与最大值匹配的列数。我可以通过这样做。
df["freq"] = df[bc_cols].stack().groupby(by='id').apply(lambda g: g[g==g.max()].count())
A B C D BC_max BC_freq
id
0 7 6 6 2 6 2
1 6 5 3 5 5 1
2 8 8 0 9 8 1
3 0 2 8 9 8 1
4 4 3 8 5 8 1
但事实证明这是非常低效和缓慢的。我们需要在具有数十万行的相当大的数据帧上执行此操作,因此我正在寻找一种有效的方法来执行此操作。有什么想法吗?
【问题讨论】:
标签: dataframe