计算值在 Pandas 范围内的出现次数

count occurrence of value over a range in Pandas

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

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)

最终输出如下所示:

您可以尝试通过 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

IIUC,这是一种方式 ->

只需执行 value_count()map 结果:

simple['count'] = simple.content_x.map(simple.content_y.value_counts()).fillna(0, downcast= 'infer')

您的示例输入的输出:

   content_x  content_y  count
0         80        100      0
1        100         90      1
2         80         90      0

另一个样本输入:

   content_x  content_y
0         80        100
1        100         90
2         80        100

输出:

   content_x  content_y  count
0         80        100      0
1        100         90      2
2         80        100      0

类似于 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

让我们使用

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

对于 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