我有一个数据框 A:
's' 'S' 'T'
0 'abc' 'a' 12
1 'def' 'b' 15
2 'abc' 'b' 1.4
Run Code Online (Sandbox Code Playgroud)
现在我想拥有 'T' 的值,其中 's' == 'abc' 和 'S' == 'b'
所以我试过:
idx = (A['s'] == 'abc') & (A['S'] == 'b')
Run Code Online (Sandbox Code Playgroud)
但我看到 .get_value() 已被弃用,并且:
number = A.at[idx,'T']
Run Code Online (Sandbox Code Playgroud)
给出这个错误:
ValueError: At based indexing on an integer index can only have integer indexers
Run Code Online (Sandbox Code Playgroud)
编辑:
number = A.loc[idx, 'T']
Run Code Online (Sandbox Code Playgroud)
返回数据帧而不是值(整数或浮点数)
print(number)
2 1.4
Name: T, dtype: float64
Run Code Online (Sandbox Code Playgroud)
这样做时:
number2 = 1.3
if (number != number2):
Run Code Online (Sandbox Code Playgroud)
我得到:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Run Code Online (Sandbox Code Playgroud)
过滤后你得到one item Series,所以选择第一个值是可能的使用iat:
number = A.loc[idx,'T'].iat[0]
print (number)
14
Run Code Online (Sandbox Code Playgroud)
但是如果掩码返回更多值,得到:
print (A)
s S T
0 abc a 12
1 abc b 15
2 abc b 14
idx = (A['s'] == 'abc') & (A['S'] == 'b')
print (idx)
0 False
1 True
2 True
dtype: bool
number = A.loc[idx,'T']
print (number)
1 15
2 14
Name: T, dtype: int64
Run Code Online (Sandbox Code Playgroud)
这里可以使用相同的方法 - 选择条件的第一个值:
number = A.loc[idx,'T'].iat[0]
print (number)
15
Run Code Online (Sandbox Code Playgroud)