任务:在多列数据框中搜索值(所有值都是唯一的)并返回该行的索引。
目前:使用get_loc,但它似乎只允许一次传递一个列,从而导致一组相当无效的try except语句。虽然它有效,但有人知道更有效的方法吗?
var PlayerWithSprite = function (sprite) {
return function () {
//What sprite to use
this.sprite = sprite;
//initial x location
this.x = 200;
//initial y location
this.y = 400;
};
};
var Player = PlayerWithSprite('my-sprite');
var playerInstance = new Player();
console.log(playerInstance);
循环似乎不起作用,因为如果列不包含值,则引发KeyError。我查看了.contains或.isin等功能,但它是我感兴趣的位置索引。
答案 0 :(得分:3)
您可以使用np.where
,它会返回您的值存在的行和列索引元组。然后,您可以从中选择该行。
df = pd.DataFrame(np.random.randint(0,100,size=(4, 4)), columns=list('ABCD'))
indices = np.where(df.values == 20)
rows = indices[0]
if len(rows) != 0:
print(rows[0])
答案 1 :(得分:3)
请使用np.random.seed
np.random.seed([3, 1415])
df = pd.DataFrame(
np.random.randint(200 ,size=(4, 4)),
columns=list('ABCD'))
df
A B C D
0 11 98 123 90
1 143 126 55 141
2 139 141 154 115
3 63 104 128 120
我们可以使用np.where
和切片找到您要查找的值。请注意,我使用了55
的值,因为我从我选择的种子获得的数据中得到了。如果20
位于您的数据集中,这将适用于i, j = np.where(df.values == 55)
list(zip(df.index[i], df.columns[j]))
[(1, 'C')]
。事实上,如果你有不止一个,它就会起作用。
(ngModelChange)
答案 2 :(得分:3)
使用向量化操作和布尔索引:
df[(df==20).any(axis=1)].index
答案 3 :(得分:3)
由于其他海报使用np.where()
,我会使用any()
提供另一种选择。
df.loc[df.isin([20]).any(axis=1)].index
如果符合条件,df.loc[*condition_here*]
将返回TRUE,您可以使用any
过滤到可能为真的行
所以这是我的df示例:
A B C D
0 82 7 48 90
1 68 18 90 14 #< ---- notice the 18 here
2 18 34 72 24 #< ---- notice the 18 here
3 69 73 40 86
df.isin([18])
A B C D
0 False False False False
1 False True False False #<- ---- notice the TRUE value
2 True False False False #<- ---- notice the TRUE value
3 False False False False
print(df.loc[df.isin([18]).any(axis=1)].index.tolist())
#output is a list
[1, 2]
答案 4 :(得分:3)
另一种方式
df[df.eq(20)].stack()
Out[1220]:
1 C 20.0
dtype: float64