前提・実現したいこと
Goのif文において、
構造体(データフレーム)と数値が比較できないため、
どうすれば良いか教えていただきたいです。
データフレームをリストに変更する方法など教えてください。
比較するデータフレームには値は1つしか入っていません。
やりたいことは、
①AからD列・16362行のcsvファイルを読み込む10、Dの場合0~18)、その条件を満たす行(データ)のみを抽出する
②C列とD列の値を用いて、【Cが〇以下かつDが〇以下】と条件を指定し(〇の中にはcの場合0
③抽出した行(データ)におけるA列の合計値を求める
(「〇以下」の〇の値を一つずつ変えて全通り(11×19通り)の条件において、A列の合計値を求める)
④Aの合計値が23を超える場合のみ、その条件とAの合計値を出力する
発生している問題・エラーメッセージ
invalid operation: score.Capply(mean) > 23 (mismatched types dataframe.DataFrame and int)
該当のソースコード
GO
1package main 2 3import ( 4 "fmt" 5 "log" 6 "os" 7 8 "github.com/go-gota/gota/dataframe" 9 "github.com/go-gota/gota/series" 10) 11 12func main() { 13 f, err := os.Open("sample.csv") 14 if err != nil { 15 log.Fatal(err) 16 } 17 defer f.Close() 18 df := dataframe.ReadCSV(f) 19 for x := 0; x < 11; x++ { 20 for y := 0; y < 19; y++ { 21 filter := df.FilterAggregation( 22 dataframe.And, 23 dataframe.F{ 24 Colname: "C", 25 Comparator: "<=", 26 Comparando: x, 27 }, 28 dataframe.F{ 29 Colname: "D", 30 Comparator: "<=", 31 Comparando: y, 32 }, 33 ) 34 score := filter.Select([]string{"A"}) 35 mean := func(s series.Series) series.Series { 36 floats := s.Float() 37 sum := 0.0 38 for _, f := range floats { 39 sum += f 40 } 41 return series.Floats(sum) 42 } 43 if score.Capply(mean) > 23 { 44 fmt.Println(x, y, score.Capply(mean)) 45 } 46 } 47 } 48}
補足情報(FW/ツールのバージョンなど)
Gotaのデータフレームを用いています。
データフレームには値は1つ(A列の合計値)しか入っていません。
あなたの回答
tips
プレビュー