我有一个名为“燕麦”的数据框-这是其中的一部分:
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:列表索引超出范围