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]