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

回答編集履歴

3

Update

2021/11/09 16:55

投稿

melian
melian

スコア21263

answer CHANGED
@@ -15,12 +15,12 @@
15
15
 
16
16
  # 該当行の上2行のいずれかが0かつ下2行のいずれかが0なら0にする
17
17
  r = r[:2] + [
18
- r[i+2] * (not ((0 in r[i:(i+2)]) and (0 in r[(i+3):(i+5)])))
18
+ r[i+2] * any((all(r[i:(i+2)]), all(r[(i+3):(i+5)])))
19
19
  for i in range(l-4)
20
20
  ] + r[-2:]
21
21
 
22
22
  # 上の行も下の行も0なら0にする
23
- r = r[:1] + [r[i+1] * bool(r[i] or r[i+2]) for i in range(l-2)] + r[-1:]
23
+ r = r[:1] + [r[i+1] * any((r[i], r[i+2])) for i in range(l-2)] + r[-1:]
24
24
 
25
25
  # データフレームに反映
26
26
  df['記録値'] = r

2

Update

2021/11/09 16:55

投稿

melian
melian

スコア21263

answer CHANGED
@@ -9,24 +9,21 @@
9
9
  '時刻': pd.date_range("12:00", "12:14", freq="min").time,
10
10
  '記録値': [0, 0, 1, 0, 3, 2, 4, 1, 2, 0, 0, 1, 3, 1, 0],
11
11
  })
12
-
12
+
13
13
  r = df['記録値'].tolist()
14
+ l = len(r)
14
15
 
15
- # 該当行の上2行のいずれかが0かつ下2行のいずれかが0なら0にする
16
+ # 該当行の上2行のいずれかが0かつ下2行のいずれかが0なら0にする
16
- rr, l = r[:2], len(r)
17
+ r = r[:2] + [
18
+ r[i+2] * (not ((0 in r[i:(i+2)]) and (0 in r[(i+3):(i+5)])))
17
- for i in range(l-4):
19
+ for i in range(l-4)
18
- x, v, y = r[i:(i+2)], r[i+2], r[(i+3):(i+5)]
19
- rr.append(v * (not ((0 in x) and (0 in y))))
20
- rr += r[-2:]
20
+ ] + r[-2:]
21
21
 
22
- # 上の行も下の行も0なら0にする
22
+ # 上の行も下の行も0なら0にする
23
- rrr = rr[:1]
24
- for i in range(l-2):
25
- rrr.append(rr[i+1] * bool(rr[i] or rr[i+2]))
23
+ r = r[:1] + [r[i+1] * bool(r[i] or r[i+2]) for i in range(l-2)] + r[-1:]
26
- rrr += rr[-1:]
27
24
 
28
25
  # データフレームに反映
29
- df['記録値'] = rrr
26
+ df['記録値'] = r
30
27
 
31
28
  print(df.to_markdown(index=False))
32
29
  ```

1

Update

2021/11/09 10:29

投稿

melian
melian

スコア21263

answer CHANGED
@@ -16,13 +16,13 @@
16
16
  rr, l = r[:2], len(r)
17
17
  for i in range(l-4):
18
18
  x, v, y = r[i:(i+2)], r[i+2], r[(i+3):(i+5)]
19
- rr.append((0 if (0 in x) and (0 in y) else 1) * v)
19
+ rr.append(v * (not ((0 in x) and (0 in y))))
20
20
  rr += r[-2:]
21
21
 
22
22
  # 「上の行も下の行も0なら0にする」
23
23
  rrr = rr[:1]
24
24
  for i in range(l-2):
25
- rrr.append((0 if (not rr[i]) and (not rr[i+2]) else 1) * rr[i+1])
25
+ rrr.append(rr[i+1] * bool(rr[i] or rr[i+2]))
26
26
  rrr += rr[-1:]
27
27
 
28
28
  # データフレームに反映