回答編集履歴

2

追記

2019/05/04 08:41

投稿

can110
can110

スコア38266

test CHANGED
@@ -57,3 +57,61 @@
57
57
  print(count) # {-1: 3, 0: 1, 1: 1, 2: 2}
58
58
 
59
59
  ```
60
+
61
+
62
+
63
+ 質問修正をうけて
64
+
65
+ --
66
+
67
+ 以下のようにDataFrameに対してループ処理を行えば求めることができます。
68
+
69
+ ```Python
70
+
71
+ import pandas as pd
72
+
73
+
74
+
75
+ df = pd.DataFrame([[2,2,1,-1],[0,1,2,2],[1,0,1,2]],columns=['A','B','C','D'])
76
+
77
+ print(df)
78
+
79
+
80
+
81
+ # 行毎のループ
82
+
83
+ for idx, row in df.iterrows():
84
+
85
+ counter = 0
86
+
87
+ # 対象列毎のループ
88
+
89
+ for val in row['A':'D']:
90
+
91
+ if val <= 0:
92
+
93
+ break
94
+
95
+ counter += 1
96
+
97
+ df.loc[idx,'counter'] = counter
98
+
99
+
100
+
101
+ df['counter'] = df['counter'].astype(int) # float -> int
102
+
103
+ print(df)
104
+
105
+ """
106
+
107
+ A B C D counter
108
+
109
+ 0 2 2 1 -1 3
110
+
111
+ 1 0 1 2 2 0
112
+
113
+ 2 1 0 1 2 1
114
+
115
+ """
116
+
117
+ ```

1

追記

2019/05/04 08:41

投稿

can110
can110

スコア38266

test CHANGED
@@ -27,3 +27,33 @@
27
27
  """
28
28
 
29
29
  ```
30
+
31
+
32
+
33
+ コメントを受けて
34
+
35
+ --
36
+
37
+
38
+
39
+ (-1,0,1,2)の出現数を求めたいなら、たとえば以下のようにして得られます。
40
+
41
+ ```Python
42
+
43
+ import pandas as pd
44
+
45
+ df = pd.DataFrame({'val':[-1,-1,-1,0,1,2,2]})
46
+
47
+
48
+
49
+ count = {}
50
+
51
+ for n in [-1,0,1,2]:
52
+
53
+ count[n] = (df['val'] == n).sum()
54
+
55
+
56
+
57
+ print(count) # {-1: 3, 0: 1, 1: 1, 2: 2}
58
+
59
+ ```