如何在python的pandas数据框列中填充静止的数值并将其作为索引?

时间:2018-09-13 13:33:37

标签: python pandas dataframe indexing

我有一个这样的数据框:

+------+------+------+
| 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   |
+------+------+

我该怎么办?

1 个答案:

答案 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