Skip to main content

Indexing

You can index your Series with gambas's built-in indexing tools.

At

func (s *Series) At(ind ...interface{}) (interface{}, error)

At returns an element at a given index.

For multiindex, you need to pass in the whole index tuple.

Example 1: Single index

myData := []interface{}{"apple", "banana", "cherry"}
myName := "Fruit"

mySeries, err := gambas.NewSeries(myData, myName, nil)
if err != nil {
fmt.Println(err)
}

res, err := mySeries.At(1)
if err != nil {
fmt.Println(err)
}
fmt.Println(res)
banana

Example 2: Multiindex

myData := []interface{}{"apple", "banana", "cherry"}
myName := "Fruit"
myIndex := [][]interface{}{{"a", "red"}, {"b", "yellow"}, {"c", "red"}}

myIndexData, err := gambas.NewIndexData(myIndex, []string{"key", "color"})
if err != nil {
fmt.Println(err)
}

mySeries, err := gambas.NewSeries(myData, myName, &myIndexData)
if err != nil {
fmt.Println(err)
}
mySeries.Print()

res, err := mySeries.At("b", "yellow")
if err != nil {
fmt.Println(err)
}
fmt.Println(res)
key    color     |    Fruit     
a red | apple
b yellow | banana
c red | cherry
banana

IAt

func (s *Series) IAt(ind int) (interface{}, error)

IAt returns an element at a given integer index.

myData := []interface{}{"apple", "banana", "cherry"}
myName := "Fruit"

mySeries, err := gambas.NewSeries(myData, myName, nil)
if err != nil {
fmt.Println(err)
}

res, err := mySeries.IAt(2)
if err != nil {
fmt.Println(err)
}
fmt.Println(res)
cherry

Loc

func (s *Series) Loc(idx ...[]interface{}) (Series, error)

Loc accepts index tuples and returns a Series object containing data at the given rows.

Each idx item should contain the index of the data you would like to query. For multiindex Series, you can either pass in the whole index tuple, or the first index.

Example 1: Indexing a single item

myData := []interface{}{"apple", "banana", "cherry", "durian", "kiwi"}
myName := "Fruit"
mySeries, err := gambas.NewSeries(myData, myName, nil)
if err != nil {
fmt.Println(err)
}

res, err := mySeries.Loc([]interface{}{2})
if err != nil {
fmt.Println(err)
}
res.Print()
     |    Fruit     
2 | cherry

Example 2: Indexing multiple items

myData := []interface{}{"apple", "banana", "cherry", "durian", "kiwi"}
myName := "Fruit"
mySeries, err := gambas.NewSeries(myData, myName, nil)
if err != nil {
fmt.Println(err)
}

res, err := mySeries.Loc([]interface{}{2}, []interface{}{4})
if err != nil {
fmt.Println(err)
}
res.Print()
     |    Fruit     
2 | cherry
4 | kiwi

Example 3: Multiindex (all index)

myData := []interface{}{"apple", "banana", "cherry", "durian", "kiwi"}
myName := "Fruit"
myIndex := [][]interface{}{{"a", "red"}, {"b", "yellow"}, {"c", "red"}, {"d", "brown"}, {"e", "green"}}

myIndexData, err := gambas.NewIndexData(myIndex, []string{"key", "color"})
if err != nil {
fmt.Println(err)
}

mySeries, err := gambas.NewSeries(myData, myName, &myIndexData)
if err != nil {
fmt.Println(err)
}

res, err := mySeries.Loc([]interface{}{"a", "red"}, []interface{}{"d", "brown"})
if err != nil {
fmt.Println(err)
}
res.Print()
key    color    |    Fruit     
a red | apple
d brown | durian

Example 4: Multiindex (first index)

myData := []interface{}{"apple", "banana", "cherry", "durian", "kiwi"}
myName := "Fruit"
myIndex := [][]interface{}{{"a", "red"}, {"b", "yellow"}, {"a", "red"}, {"b", "brown"}, {"a", "green"}}

myIndexData, err := gambas.NewIndexData(myIndex, []string{"key", "color"})
if err != nil {
fmt.Println(err)
}

mySeries, err := gambas.NewSeries(myData, myName, &myIndexData)
if err != nil {
fmt.Println(err)
}

res, err := mySeries.Loc([]interface{}{"a"})
if err != nil {
fmt.Println(err)
}
res.Print()
key    color    |    Fruit     
a red | apple
a red | cherry
a green | kiwi

LocItems

func (s *Series) LocItems(idx ...[]interface{}) ([]interface{}, error)

LocItems acts the exact same as Loc, but returns data as []interface{} instead of Series. For usage, refer to Loc.

myData := []interface{}{"apple", "banana", "cherry", "durian", "kiwi"}
myName := "Fruit"

mySeries, err := gambas.NewSeries(myData, myName, nil)
if err != nil {
fmt.Println(err)
}

res, err := mySeries.LocItems([]interface{}{1}, []interface{}{3}, []interface{}{4})
if err != nil {
fmt.Println(err)
}
fmt.Println(res)
[banana durian kiwi]

ILoc

func (s *Series) ILoc(min, max int) ([]interface{}, error)

ILoc returns an array of elements at a given integer index range.

myData := []interface{}{"apple", "banana", "cherry", "durian", "kiwi"}
myName := "Fruit"

mySeries, err := gambas.NewSeries(myData, myName, nil)
if err != nil {
fmt.Println(err)
}

res, err := mySeries.ILoc(1, 3)
if err != nil {
fmt.Println(err)
}
fmt.Println(res)
[banana cherry]