【问题标题】:julia dataframe - subsetting column by list of valuesjulia dataframe - 按值列表对列进行子集化
【发布时间】:2016-03-20 05:14:03
【问题描述】:
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), :]

但我想知道是否有办法为大型值列表执行此操作

【问题讨论】:

  • df[ [x in [3,4] for x in df[:A]] ,:] 是一个等价物。易于适应其他设置和条件。
  • Matt B 的 vectorin 函数非常有用,对于 julia 新用户来说,双数组理解不是很直观。我认为应该将其添加到 Base 中。

标签: dataframe subset julia data-manipulation


【解决方案1】:

上面接受的答案不再有效。 所以这是 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     │

【讨论】:

    【解决方案2】:
    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 |
    

    【讨论】:

    • ERROR: UndefVarError: findin not defined
    猜你喜欢
    • 1970-01-01
    • 2020-10-05
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-24
    • 2016-01-14
    相关资源
    最近更新 更多