我有一个具有以下结构的DataFrame,例如:
show(q)
2×5 DataFrame
Row │ state left right up down
│ Any Float64 Float64 Float64 Float64
─────┼────────────────────────────────────────────
1 │ (1, 1) 0.0 0.0 0.0 0.0
2 │ (2, 2) 0.0 0.0 0.0 0.0
,其中我使用列state
作为索引列,以元组作为索引。我想使用索引访问数据,比如q[q.state .== (1,1), 'down']
,我该怎么做?
此外,当我使用这个命令q[q.state .== (1,1), :]
访问相应状态的行时,它返回给我一个空的DataFrame:
0×5 DataFrame
Row │ state left right up down
│ Any Float64 Float64 Float64 Float64
─────┴───────────────────────────────────────────
为什么?
首先,您在编写q.state .== (1,1)
时犯的错误,因为它产生:
julia> q.state .== (1,1)
2-element BitVector:
0
0
因为(1,1)
是广播的
你需要写:
julia> q.state .== Ref((1,1))
2-element BitVector:
1
0
将(1,1)
视为标量。
现在你有:
julia> q[q.state .== Ref((1,1)), :]
1×5 DataFrame
Row │ state left right up down
│ Any Any Any Any Any
─────┼────────────────────────────────
1 │ (1, 1) 0.0 0.0 0.0 0.0
如果你想访问一个数据帧的单个单元格,用查找写:
julia> q[findfirst(==((1,1)), q.state), :down]
0.0
或者如果您更谨慎(并确保只有一个匹配项):
julia> q[only(findall(==((1,1)), q.state)), :down]
0.0