gpt4 book ai didi

python - 使用 Pandas 计算给定集合中行值的出现次数

转载 作者:行者123 更新时间:2023-11-28 20:03:17 24 4
gpt4 key购买 nike

我有一个类似于

的数据框
     a   b   c   d   e
0 36 38 27 12 35
1 45 33 8 41 18
4 32 14 4 14 9
5 43 1 31 11 3
6 16 8 3 17 39
...

我想为每一行计算给定集合中值的出现次数。

我想出了以下代码 (Python 3),它似乎可以工作,但我正在寻找效率,因为我的真实数据框要复杂得多,也大得多:

import pandas as pd
import numpy as np

def column():
return [np.random.randint(0,49) for _ in range(20)]

df = pd.DataFrame({'a': column(),'b': column(),'c': column(),'d': column(),'e': column()})

given_set = {3,8,11,18,22,24,35,36,42,47}

def count_occurrences(row):
return sum(col in given_set for col in (row.a,row.b,row.c,row.d,row.e))

df['count'] = df.apply(count_occurrences, axis=1)

print(df)

有没有办法用 pandas 向量运算符获得相同的结果? (而不是 Python 函数)

提前致谢。

最佳答案

您可以使用 IIUC DataFrame.isin()方法:

数据:

In [41]: given_set = {3,8,11,18,22,24,35,36,42,47}

In [42]: df
Out[42]:
a b c d e
0 36 38 27 12 35
1 45 33 8 41 18
4 32 14 4 14 9
5 43 1 31 11 3
6 16 8 3 17 39

解决方法:

In [44]: df['new'] = df.isin(given_set).sum(1)

In [45]: df
Out[45]:
a b c d e new
0 36 38 27 12 35 2
1 45 33 8 41 18 2
4 32 14 4 14 9 0
5 43 1 31 11 3 2
6 16 8 3 17 39 2

解释:

In [49]: df.isin(given_set)
Out[49]:
a b c d e
0 True False False False True
1 False False True False True
4 False False False False False
5 False False False True True
6 False True True False False

In [50]: df.isin(given_set).sum(1)
Out[50]:
0 2
1 2
4 0
5 2
6 2
dtype: int64

更新:如果你想检查是否存在而不是计数,你可以这样做(感谢 @DSM ):

In [6]: df.isin(given_set).any(1)
Out[6]:
0 True
1 True
4 False
5 True
6 True
dtype: bool

In [7]: df.isin(given_set).any(1).astype(np.uint8)
Out[7]:
0 1
1 1
4 0
5 1
6 1
dtype: uint8

关于python - 使用 Pandas 计算给定集合中行值的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42352254/

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