计算 Pandas 中某个范围内值的出现次数

时间:2021-07-14 03:51:57

标签: pandas countif

我有一个如下所示的数据框:

simple = pd.DataFrame([
    (80,100 ),
    (100,90 ),
    (80, 90 ),
], columns=['content_x', 'content_y'])

    content_x   content_y
0   80          100
1   100         90
2   80          90

我想计算 content_x 中值在 content_y 列上的出现次数。 (在 Excel 中,我使用的是 countif)

最终输出如下:

enter image description here

4 个答案:

答案 0 :(得分:1)

您可以通过 isin() 尝试:

simple['count of X in Y']=simple['content_y'].isin(simple['content_x']).astype(int)
#OR(via view())
simple['count of X in Y']=simple['content_y'].isin(simple['content_x']).view('i1')

simple 的输出:

  content_x     content_y   count of X in Y
0   80          100             1
1   100         90              0
2   80          90              0

答案 1 :(得分:1)

类似于 Anurag 的回答,但我认为您正在寻找每行每个数字的总计?您使用 groupbytransform 来获得:

import pandas as pd
simple = pd.DataFrame([
    (80,100 ),
    (100,90 ),
    (80, 90 ),
], columns=['content_x', 'content_y'])
simple['count'] = simple['content_y'].isin(simple['content_x'])
simple['count'] = simple.groupby('content_y')['count'].transform('sum')
simple
Out[1]: 
   content_x  content_y  count
0         80        100      1
1        100         90      0
2         80         90      0

答案 2 :(得分:1)

让我们使用

np.in1d 与列数组相交

simple['count of X in Y']=np.in1d(simple['content_y'].values,simple['content_x'].values).astype(int)



     content_x  content_y  count of X in Y
0         80        100                1
1        100         90                0
2         80         90                0

答案 3 :(得分:1)

对于 content_x 中的每一行,将 content_y 中的所有出现相加。这很容易做到,因为您可以对布尔过滤器求和。然后只需将其添加到列表中,并在循环后将其全部设为新的数据框列。我敢肯定还有其他方法,但这个方法相当简单。

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'x' : [80, 100, 80],
    'y' : [100, 90, 90],
})

x_in_y = []
for i in range(len(df)):
    x_in_y.append( sum(df.y == df.x[i]) )

df['x_in_y'] = x_in_y

enter image description here

相关问题