如何在python中从数据框中搜索并提取特定值?

我有一个名为“燕麦”的数据框-这是其中的一部分:

      Name         Age  Year    T   Neigh One   Neigh Two
0   Carl P          31  1998    0.1    5454     657
1   Tyler A         26  2012    3.9    578      98
2   Antoine G       20  1997    1.7    17       9878
3   Travis A        23  2008    3.2    199      398
4   Geoff H         22  1980    -0.3   901      7650
5   David C         28  2014    4.5    8001     72
6   Antoine G           21  1998    2.3    5678     9800
7   Tyler A             25  2011    3.1    2245     450

我正在尝试在每一行中运行一个for循环。 “邻居一个”列中的值是指另一行的索引,根据特定的变量,该行将导致另一行的索引,我希望从该行中提取一个变量。

这是我尝试过的:

for index,row in oat.iterrows():
    indice = row['Neigh One']
    name = oat.iloc[indice]["Name"]
    age = oat.iloc[indice]["Age"]
    age_plus_one = age + 1
    new = oat.loc[(oat.Name == name) & (oat.Age == age_plus_one),'T'].tolist()[0]

    print(new)

我从尝试的最后一个变量“ new”中收到一条错误消息。基本上,我循环遍历每一行,并基于“ Neighone”值,它将转到该索引,提取名称和年龄,然后添加1。从那里,我正在寻找具有相同内容的新行名称,但年龄增加了一个。

注意:将有零行与此匹配,或者只有一行。一场比赛是不可能的。

对于每个循环,我要做的只是简单地返回基于我的布尔过滤器返回的“ T”值。

我还尝试了以下操作作为最终变量,并分别返回了错误消息:

new= oat[(oat['Name'] == name) & (oat['Age'] == age_plus_one)].T.item()

ValueError:只能将大小为1的数组转换为Python标量

new = oat[(oat['Name'] == name) & (oat['Age'] == age_plus_one),'T'].values[0]

不是错误,但是会为整个数据帧而不是实际值返回True False布尔值列表。

new = oat.loc[(oat.Name == name) & (oat['Age'] == age_plus_one),'T'].values[0]

IndexError:索引0超出了大小为0的轴0的边界

new = oat.loc[(oat.name == name) & (oat.Age == age_plus_one),'T'].tolist()[0]

IndexError:列表索引超出范围

brittany1988 回答:如何在python中从数据框中搜索并提取特定值?

for index,row in oat.iterrows():
    indice = row['Neigh One']
    name = oat.iloc[indice]["Name"]
    age = oat.iloc[indice]["Age"]
    age_plus_one = age + 1
    #--------below is revised---------
    mask = (oat.Name == name) & (oat.Age == age_plus_one)
    if sum(mask) == 0:
        new = None
    else:
        new = oat.loc[mask,'T'].tolist()[0]

    print(new)

如前所述,(oat.Name ==名称)和(oat.Age == age_plus_one)可能不匹配。因此,if-else将有助于切换大小写。

本文链接:https://www.f2er.com/3158403.html

大家都在问