Pythonのパンダデータフレーム列に残りの数値を入力してインデックスとして配置するにはどうすればよいですか?

jartymcfly

私はこのようなデータフレームを持っています:

+------+------+------+
| index| ATR2 | ATR3 |
+------+------+------+
| 1    |  1   |  2   |
+------+------+------+
| 2    |  3   |  10  |
+------+------+------+
| 3    |  4   |  5   |
+------+------+------+
| 4    |  6   |  6   |
+------+------+------+
| 5    |  7   |  2   |
+------+------+------+
| 6    |  10  |  5   |
+------+------+------+

残りの値を取得するために行を追加し、次のデータフレームを取得するために列をインデックスとして配置したいと思います。

+------+------+
| ATR2 | ATR3 |
+------+------+
|  1   |  2   |
+------+------+
|  2   |  0   |
+------+------+
|  3   |  10  |
+------+------+
|  4   |  5   |
+------+------+
|  5   |  0   |
+------+------+
|  6   |  6   |
+------+------+
|  7   |  2   |
+------+------+
|  8   |  0   |
+------+------+
|  9   |  0   |
+------+------+
|  10  |  5   |
+------+------+

どうすればいいですか?

ジェズリール

DataFrame.reindexすべての値がATR2列で一意である場合に使用ます。

a = np.arange(df['ATR2'].min(), df['ATR2'].max() + 1)
df = df.set_index('ATR2').reindex(a, fill_value=0).reset_index()
print (df)
   ATR2  ATR3
0     1     2
1     2     0
2     3    10
3     4     5
4     5     0
5     6     6
6     7     2
7     8     0
8     9     0
9    10     5

値が一意でない場合はmerge、以下によってDataFrame作成されたヘルパーによる左結合で使用できますnp.arange

print (df)
   ATR2  ATR3
1     1     2
2     3    10
3     4     5
4     6     6
5     7     2
6    10     5
7     1     8

df1 = pd.DataFrame({'ATR2':np.arange(df['ATR2'].min(), df['ATR2'].max() + 1)})

df = df1.merge(df, how='left').fillna(0)
print (df)
    ATR2  ATR3
0      1   2.0
1      1   8.0
2      2   0.0
3      3  10.0
4      4   5.0
5      5   0.0
6      6   6.0
7      7   2.0
8      8   0.0
9      9   0.0
10    10   5.0

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ