teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

やりたいことを記載しました!

2021/10/18 00:56

投稿

obahaya
obahaya

スコア1

title CHANGED
File without changes
body CHANGED
@@ -4,8 +4,15 @@
4
4
  どうすれば良いか教えていただきたいです。
5
5
  データフレームをリストに変更する方法など教えてください。
6
6
 
7
- データフレームには値は1つしか入っていません。
7
+ 比較するデータフレームには値は1つしか入っていません。
8
8
 
9
+ やりたいことは、
10
+ ①AからD列・1~6362行のcsvファイルを読み込む
11
+ ②C列とD列の値を用いて、【Cが〇以下かつDが〇以下】と条件を指定し(〇の中にはcの場合0~10、Dの場合0~18)、その条件を満たす行(データ)のみを抽出する
12
+ ③抽出した行(データ)におけるA列の合計値を求める
13
+ (「〇以下」の〇の値を一つずつ変えて全通り(11×19通り)の条件において、A列の合計値を求める)
14
+ ④Aの合計値が23を超える場合のみ、その条件とAの合計値を出力する
15
+
9
16
  ### 発生している問題・エラーメッセージ
10
17
  ```
11
18
  invalid operation: score.Capply(mean) > 23 (mismatched types dataframe.DataFrame and int)
@@ -42,7 +49,7 @@
42
49
  Comparando: x,
43
50
  },
44
51
  dataframe.F{
45
- Colname: "H",
52
+ Colname: "D",
46
53
  Comparator: "<=",
47
54
  Comparando: y,
48
55
  },

4

詳細を加えました。

2021/10/18 00:56

投稿

obahaya
obahaya

スコア1

title CHANGED
File without changes
body CHANGED
@@ -1,21 +1,69 @@
1
1
  ### 前提・実現したいこと
2
2
  Goのif文において、
3
- 構造体(データフレーム)と数が比較できないため、
3
+ 構造体(データフレーム)と数が比較できないため、
4
4
  どうすれば良いか教えていただきたいです。
5
5
  データフレームをリストに変更する方法など教えてください。
6
6
 
7
+ データフレームには値は1つしか入っていません。
8
+
7
9
  ### 発生している問題・エラーメッセージ
8
10
  ```
9
- invalid operation: df.Capply(mean) > 23.5 (mismatched types dataframe.DataFrame and float64)
11
+ invalid operation: score.Capply(mean) > 23 (mismatched types dataframe.DataFrame and int)
10
12
  ```
11
13
 
12
14
  ### 該当のソースコード
13
15
 
14
16
  ```GO
17
+ package main
18
+
19
+ import (
20
+ "fmt"
21
+ "log"
22
+ "os"
23
+
24
+ "github.com/go-gota/gota/dataframe"
25
+ "github.com/go-gota/gota/series"
26
+ )
27
+
28
+ func main() {
29
+ f, err := os.Open("sample.csv")
30
+ if err != nil {
31
+ log.Fatal(err)
32
+ }
33
+ defer f.Close()
34
+ df := dataframe.ReadCSV(f)
35
+ for x := 0; x < 11; x++ {
36
+ for y := 0; y < 19; y++ {
37
+ filter := df.FilterAggregation(
38
+ dataframe.And,
39
+ dataframe.F{
40
+ Colname: "C",
41
+ Comparator: "<=",
42
+ Comparando: x,
43
+ },
44
+ dataframe.F{
45
+ Colname: "H",
46
+ Comparator: "<=",
47
+ Comparando: y,
48
+ },
49
+ )
50
+ score := filter.Select([]string{"A"})
51
+ mean := func(s series.Series) series.Series {
52
+ floats := s.Float()
53
+ sum := 0.0
54
+ for _, f := range floats {
55
+ sum += f
56
+ }
57
+ return series.Floats(sum)
58
+ }
15
- if score.Capply(mean) > 23.5 {
59
+ if score.Capply(mean) > 23 {
16
- fmt.Println(score.Capply(mean))
60
+ fmt.Println(x, y, score.Capply(mean))
61
+ }
62
+ }
63
+ }
17
64
  }
18
65
  ```
19
66
  ### 補足情報(FW/ツールのバージョンなど)
20
67
 
21
- Gotaのデータフレームを用いています。
68
+ Gotaのデータフレームを用いています。
69
+ データフレームには値は1つ(A列の合計値)しか入っていません。

3

ソースコードを訂正しました。

2021/10/18 00:45

投稿

obahaya
obahaya

スコア1

title CHANGED
File without changes
body CHANGED
@@ -12,9 +12,10 @@
12
12
  ### 該当のソースコード
13
13
 
14
14
  ```GO
15
- if score.Capply(mean) > 23.5 {
15
+ if score.Capply(mean) > 23.5 {
16
- fmt.Println(score.Capply(mean))
16
+ fmt.Println(score.Capply(mean))
17
- }
17
+ }
18
+ ```
18
19
  ### 補足情報(FW/ツールのバージョンなど)
19
20
 
20
21
  Gotaのデータフレームを用いています。

2

前回のは解決できましたが、新たな課題に当たりました。

2021/10/15 07:55

投稿

obahaya
obahaya

スコア1

title CHANGED
@@ -1,1 +1,1 @@
1
- Go Filter(条件に一致した行取得)の使い方が分からな
1
+ Go 構造体(データフレーム)と数字比較する知りたです。
body CHANGED
@@ -1,48 +1,20 @@
1
1
  ### 前提・実現したいこと
2
- Goのデータフレームにおいて、
2
+ Goのif文において、
3
+ 構造体(データフレーム)と数字が比較できないため、
4
+ どうすれば良いか教えていただきたいです。
3
- Filter(条件に一致した行取得)の使いが分かりません
5
+ データフレームリストに変更する法など教えてください
4
6
 
5
- csvファイルの中身は1行目にA,B,C,…M,Nと記載し、
6
- 2行目以降は数値のみが記載されています。
7
-
8
- C(C列)の値が3以下かつD(D列)の値が4以下のデータ(行)のみを抽出し出力したいです。
9
-
10
7
  ### 発生している問題・エラーメッセージ
11
-
12
8
  ```
13
- .\test2.go:17:34: cannot use "C" (type untyped string) as type int in field value
14
- .\test2.go:17:45: cannot use 3 (type untyped int) as type series.Comparator in field value
9
+ invalid operation: df.Capply(mean) > 23.5 (mismatched types dataframe.DataFrame and float64)
15
- .\test2.go:17:45: too few values in dataframe.F{...}
16
- .\test2.go:18:22: cannot use "D" (type untyped string) as type int in field value
17
- .\test2.go:18:33: cannot use 4 (type untyped int) as type series.Comparator in field value
18
- .\test2.go:18:33: too few values in dataframe.F{...}
19
10
  ```
20
11
 
21
12
  ### 該当のソースコード
22
13
 
23
14
  ```GO
24
- package main
25
-
26
- import (
27
- "fmt"
28
- "io/ioutil"
29
- "strings"
30
-
31
- "github.com/go-gota/gota/dataframe"
32
- )
33
-
34
- func main() {
35
- content, _ := ioutil.ReadFile("sample.csv")
36
- ioContent := strings.NewReader(string(content))
37
-
38
- df := dataframe.ReadCSV(ioContent)
15
+ if score.Capply(mean) > 23.5 {
39
-
40
- filter := df.Filter(dataframe.F{"C", "<=", 3}).
41
- Filter(dataframe.F{"D", "<=", 4})
42
-
43
- fmt.Println(filter)
16
+ fmt.Println(score.Capply(mean))
44
- }
17
+ }
45
- ```
46
18
  ### 補足情報(FW/ツールのバージョンなど)
47
19
 
48
20
  Gotaのデータフレームを用いています。

1

タグを変更しました!

2021/10/15 06:09

投稿

obahaya
obahaya

スコア1

title CHANGED
File without changes
body CHANGED
File without changes