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

回答編集履歴

1

2025/12/05 03:24

投稿

melian
melian

スコア21615

answer CHANGED
@@ -1,29 +1,38 @@
1
- 元の配列(`R`)と同じshapeの boolean 配列(初期値は`False`)を作成して、全ての要素が 0 である行と列を除いた配列要素を `True` に設定します。(以下のコードの`mask`配列)
2
- この `mask`配列を使用して対象要素のみ計算を行います。(例として要素の値に`1`えます)
1
+ > 状態にしてから、とある作業して、また復元したいと考ています
3
2
 
3
+ [pandas.Series.combine_first — pandas 2.3.3 documentation](https://pandas.pydata.org/docs/reference/api/pandas.Series.combine_first.html) を利用して、データフレーム`R2`の欠損値(全て要素が`0`の行と列)をデータフレーム`R`で埋め合わせます(補完)。
4
+
4
5
  ```python
5
- import numpy as np
6
6
  import pandas as pd
7
7
 
8
- R = pd.read_csv("R.csv",header=None).values
8
+ R = pd.read_csv("R.csv",header=None)
9
9
  print(R)
10
10
 
11
- mask = np.zeros(R.shape, dtype=bool)
11
+ # delete rows and columns where all elements are 0
12
- mask[np.ix_((R!=0).any(axis=1), (R!=0).any(axis=0))] = True
12
+ R2 = R.loc[~R.eq(0).all(axis=1), ~R.eq(0).all(axis=0)]
13
+ print(R2)
13
14
 
14
- def func(v):
15
+ # calculate
15
- return v + 1
16
+ R2 += 1
16
17
 
18
+ # restore rows and columns where all elements are 0
17
- R2 = np.where(mask, func(R), R)
19
+ R2 = R2.combine_first(R).to_numpy()
18
20
  print(R2)
19
21
 
22
+ # 0 1 2 3
20
- # [[1 2 0 4]
23
+ # 0 1 2 0 4
21
- # [3 0 0 0]
24
+ # 1 3 0 0 0
22
- # [0 0 0 0]
25
+ # 2 0 0 0 0
23
- # [5 0 0 0]]
26
+ # 3 5 0 0 0
24
27
  #
28
+ # 0 1 3
29
+ # 0 1 2 4
30
+ # 1 3 0 0
31
+ # 3 5 0 0
32
+ #
25
33
  # [[2 3 0 5]
26
34
  # [4 1 0 1]
27
35
  # [0 0 0 0]
28
36
  # [6 1 0 1]]
29
- ```
37
+ ```
38
+