我有一个如下所示的数据框:
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)
最终输出如下:
答案 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 的回答,但我认为您正在寻找每行每个数字的总计?您使用 groupby
和 transform
来获得:
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