pandas 计算一个值在另一个df的同一序列中的次数

4ioopgfo  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(106)

我一直很难看到有多少次一个值存在于同一列中,但另一个df。这是我的工作:

data1 = {
    "Col 1": ['a','b','c'],
    "Col 2": [1,2,3]
}

data2 = {
    "Col 1": ['f','a','b'],
    "Col 2": [4,5,6]
}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

现在我有这个代码块来查看df1的col 1中的值在df2的col 1中出现了多少次。(我只有一个col 2,因为我想展示我想在不使用iterrows的情况下如何迭代):

count = 0 #Setting the variable count
for row in df1['Col 1']: #Iterating through each row.
    if row in df2['Col 1']:
        count += 1 #Increasing count by 1 every time there's a repeated value.
print("Count:", count)

当我运行这个函数时,我的count返回为0,而它应该是2,因为df1 ['Col 1']和df2 [' Col 2']都共享'a'和'b'。
我相信这是一个小错误,但我会感激在正确的方向轻推。谢谢你,谢谢

vshtjzan

vshtjzan1#

在pandas中检查某个列是否包含某个值时,需要添加.values。如果没有它,您将创建一个带有列和索引的拼接框架,如下所示:

print(df2['Col 1'])

将其更改为print(df2['Col 1'].values)将生成列内容的列表:['f' 'a' 'b'],允许if语句在该列表中查找字符串。
因此,将代码更新为:

count = 0 #Setting the variable count
for row in df1['Col 1']: #Iterating through each row.
    if row in df2['Col 1'].values:
        count += 1 #Increasing count by 1 every time there's a repeated value.
print("Count:", count)

打印出:Count:2,你的预期答案。关于在列中查找值的更多信息可以在here中找到。

rlcwz9us

rlcwz9us2#

只需找到 Dataframe 的相应列之间的set交集:

df1.apply(lambda x: len(set(x) & set(df2[x.name])))
Col 1    2
Col 2    0
dtype: int64

相关问题