【问题标题】:How to find specific values in a pandas dataframe in python如何在 python 中的 pandas 数据框中查找特定值
【发布时间】:2021-04-03 17:49:02
【问题描述】:

我的数据框有一列包含名称、组和其他一些值。看起来是这样的,供参考

Name Group
John Doe A
Joe Smith A
James Brown B

我正在输入一个人的姓名,并将他们与上面突出显示的“comps”数据框进行比较。我本质上想在比较人员输入时创建一个置信度指数,如果该人在不同的组中,我希望将置信度指数减去 10。它看起来像这样:

input_name = Jim Jones, input_group = A

Name Group Confidence
John Doe A 100
Joe Smith A 100
James Brown B 90

我目前拥有的代码是

if comps.loc[comps['Group'] == input_group]:
    comps['Confidence'] = 100
else:
    comps['Confidence'] = 90

当我运行它时,我得到了以下回溯:

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

【问题讨论】:

  • 所以你只是匹配组?因为input_name = Jim Jones 在您拥有的现有名称列表中没有接近 100% 匹配

标签: python pandas dataframe


【解决方案1】:
import json
import pandas as pd

data = [
        ["John Doe", "A"],
        ["Joe Smith", "A"],
        ["James Brown", "B"]
]

df = pd.DataFrame(data, columns=["Name","Group"])
print(df)

print()

data = [
        ["John Doe", "A",100],
        ["Joe Smith", "A",100],
        ["James Brown", "C",100]
]

comps = pd.DataFrame(data, columns=["Name","Group","Confidence"])
print(comps)

print()

for index, (name1,group1,confidence)  in comps.iterrows():

    for index, (name2,group2) in df.iterrows():

        if((name2 == name1) and (group1 == group2)):
            comps.loc[comps.Name == name1,'Confidence'] = 100

        if((name2 == name1) and (group1 != group2)):
            comps.loc[comps.Name == name1,'Confidence'] = int(comps.loc[comps.Name == name1,'Confidence']) - 10

print(comps)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-16
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2020-11-07
    • 1970-01-01
    相关资源
    最近更新 更多