首页 > 解决方案 > 如何在 python 的 pandas 数据框列中填充剩余数值并作为索引?

问题描述

我有一个这样的数据框:

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

我该怎么做?

标签: pythonpandasdataframeindexing

解决方案


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助手与左连接一起使用:DataFramenp.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

推荐阅读