julia数据帧 - 按值列表对列进行子集化

时间:2015-12-14 16:22:54

标签: dataframe subset julia data-manipulation

using DataFrames

df = DataFrame(A = 1:10, B = 2:2:20)

10x2 DataFrame
| Row | A  | B  |
|-----|----|----|
| 1   | 1  | 2  |
| 2   | 2  | 4  |
| 3   | 3  | 6  |
| 4   | 4  | 8  |
| 5   | 5  | 10 |
...
...

是否可以使用值列表来对数据帧进行子集,例如

df[df[:A] .in [3,4], :]

如果列表很小,可以通过

完成
df[(df[:A] .== 3) |  (df[:A] .== 4), :]

但我想知道是否有办法为大型值列表

执行此操作

2 个答案:

答案 0 :(得分:3)

julia> df = DataFrame(x = 1:3:30, y = [2, 1, 2,1,3,4,5,3,3,3])
10x2 DataFrames.DataFrame
| Row | x  | y |
|-----|----|---|
| 1   | 1  | 2 |
| 2   | 4  | 1 |
| 3   | 7  | 2 |
| 4   | 10 | 1 |
| 5   | 13 | 3 |
| 6   | 16 | 4 |
| 7   | 19 | 5 |
| 8   | 22 | 3 |
| 9   | 25 | 3 |
| 10  | 28 | 3 |

julia> df[findin(df[:y],[1,3]),:]
6x2 DataFrames.DataFrame
| Row | x  | y |
|-----|----|---|
| 1   | 4  | 1 |
| 2   | 10 | 1 |
| 3   | 13 | 3 |
| 4   | 22 | 3 |
| 5   | 25 | 3 |
| 6   | 28 | 3 |

答案 1 :(得分:0)

上面接受的答案不再起作用。 所以这是2019年的工作方式:

# by column name

julia> df[ [x in [3,4] for x in df[:A]] ,:]
2×2 DataFrame
│ Row │ A     │ B     │
│     │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1   │ 3     │ 6     │
│ 2   │ 4     │ 8     │

# or by column number

julia> df[ [x in [3,4] for x in df[:1]] ,:]
2×2 DataFrame
│ Row │ A     │ B     │
│     │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1   │ 3     │ 6     │
│ 2   │ 4     │ 8     │