我有2个数据帧。
df1
id marks
1 100
2 200
3 300
df2
name score flag
'abc' 100 T
'zxc' 300 F
我正在寻找的是我的df1的第一行,
检查我的df2中的相应列score
,并获取该标志。
即
row = df1.iloc[0]
marks = row['marks']
从df2中找到标记中的相应值,并给出它具有的标记。
即
for marks 100 ====corresponds to score 100 and flag = T
我不想使用pandas merge
,因为我只想查找我的第一行。使用iloc[0]
答案 0 :(得分:1)
选项1
您可以使用df.isin
:
first_flag = df2[df2.score.isin([df1.marks[0]])].flag
print(first_flag)
0 T
要获取值,请使用.values.tolist()
:
print(first_flag.values.tolist())
['T']
要将单个值作为单个项目使用,请使用.item
:
print(first_flag.item())
'T'
选项2
使用df.eval
:
score = df1.marks[0]
first_flag = df2[df2.eval('score == {}'.format(score))].flag
print(first_flag)
0 T
选项3
使用df.eq
score = df1.marks[0]
first_flag = df2[df2.score.eq(score)].flag
print(first_flag)
0 T
使用df.merge
。
flags = df1.merge(df2, left_on='marks', right_on='score').flag
print(flags)
0 T
1 F
Name: flag, dtype: object
如果要为没有标记的行检索NaN
,可以进行left
加入:
flags = df1.merge(df2, left_on='marks', right_on='score', how='left').flag
print(flags)
0 T
1 NaN
2 F
答案 1 :(得分:0)
你可以
In [437]: df2[df2.score.eq(df1.iloc[0].marks)] # or df1.marks[0]
Out[437]:
name score flag
0 'abc' 100 T
In [438]: df2[df2.score.eq(df1.iloc[0].marks)].flag
Out[438]:
0 T
Name: flag, dtype: object
或者,使用
In [442]: df2[df2.score == df1.marks.iloc[0]].flag
Out[442]:
0 T
Name: flag, dtype: object
或者,使用查询
In [441]: df2.query('score == @df1.marks[0]').flag
Out[441]:
0 T
Name: flag, dtype: object
答案 2 :(得分:0)
我认为你需要:
a = df2.loc[df2['score'].eq(df1['marks'].iat[0]), 'flag']
print (a)
0 T
Name: flag, dtype: object
a = df2.loc[df2['score'] == df1['marks'].iat[0], 'flag']
print (a)
0 T
Name: flag, dtype: object
标量输出:
b = 'no match' if a.empty else a.item()
print (b)
T