gpt4 book ai didi

python - Pandas :查找行明智的频繁值

转载 作者:太空狗 更新时间:2023-10-30 02:54:16 25 4
gpt4 key购买 nike

我有一个包含二进制值的数据集。我想找出每一行中的频繁值。这个数据集有几百万条记录。最有效的方法是什么?以下是数据集的示例。

import pandas as pd
data = pd.read_csv('myData.csv', sep = ',')
data.head()
bit1 bit2 bit2 bit4 bit5 frequent freq_count
0 0 0 1 1 0 3
1 1 1 0 0 1 3
1 0 1 1 1 1 4

我想像上面的示例一样创建 frequent 以及 freq_count 列。这些不是原始数据集的一部分,将在查看所有行后创建。

最佳答案

这是一种方法-

def freq_stat(df):
a = df.values
zero_c = (a==0).sum(1)
one_c = a.shape[1] - zero_c
df['frequent'] = (zero_c<=one_c).astype(int)
df['freq_count'] = np.maximum(zero_c, one_c)
return df

sample 运行-

In [305]: df
Out[305]:
bit1 bit2 bit2.1 bit4 bit5
0 0 0 0 1 1
1 1 1 1 0 0
2 1 0 1 1 1

In [308]: freq_stat(df)
Out[308]:
bit1 bit2 bit2.1 bit4 bit5 frequent freq_count
0 0 0 0 1 1 0 3
1 1 1 1 0 0 1 3
2 1 0 1 1 1 1 4

基准测试

让我们用 @jezrael's soln 中最快的方法来测试这个方法:

from scipy import stats

def mod(df): # @jezrael's best soln
a = df.values.T
b = stats.mode(a)

df['a'] = b[0][0]
df['b'] = b[1][0]
return df

此外,让我们使用另一篇文章中的相同设置并获取时间 -

In [323]: np.random.seed(100)
...: N = 10000
...: #[10000 rows x 20 columns]
...: df = pd.DataFrame(np.random.randint(2, size=(N,20)))
...:

# @jezrael's soln
In [324]: %timeit mod(df)
100 loops, best of 3: 5.92 ms per loop

# Proposed in this post
In [325]: %timeit freq_stat(df)
1000 loops, best of 3: 496 µs per loop

关于python - Pandas :查找行明智的频繁值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46538103/

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