我有一个这样的数据框:
+------+------+------+
| 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 |
+------+------+
我该怎么办?
答案 0 :(得分:3)
如果ATR2
列中的所有值都是唯一的,请使用DataFrame.reindex
:
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