Julia Dataframe создает дубликат переменной без связи - PullRequest
4 голосов
/ 20 марта 2020

Я хочу определить новый столбец на основе a, который впоследствии не будет связан с оригиналом.

using DataFrames
x = DataFrame(a=1:3)
x.b = x.a
x.b[1] += 1

1 Ответ

6 голосов
/ 20 марта 2020

Есть несколько способов сделать это, основные из них:

x[:, :b] = x.a

или

x.b = x[:, :a]

Вы также можете написать:

x[!, :b] = x[:, :a]

(это может быть полезным, если :b была переменной)

Наконец, вы также можете просто написать:

df.b = copy(df.a)

или

df.b = df.a[:]

Все правила индексации для DataFrames.jl можно найти по адресу https://juliadata.github.io/DataFrames.jl/stable/lib/indexing/.

Короче (немного упрощая, но эти правила достаточно знать на практике):

  • df.col - это не копирование для получения и для установки столбца
  • df[!, :col] аналогично df.col с той разницей, что вы можете легко использовать переменную вместо литерала для индексации, и она работает с широковещательной передачей, пока df.col не работает с широковещательной рассылкой, если :col не присутствовало в кадре данных
  • df[:, :col] копий для получения столбца и является операцией на месте для установки столбца, если только :col нет присутствует в df, и в этом случае он заново выделяет его при установке
...