python - 如何在 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 |
+------+------+
我该怎么做?
解决方案
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
推荐阅读
- firebird - 令牌未知 - 结束触发火鸟
- java - 片段不传递数据
- html - CSS中的链接和样式标签
- python - 没有漂亮的汤
- javascript - 页面重新加载时本地存储中的数据丢失
- java - super() 只能从子类构造函数中调用吗?| 爪哇
- php - 无法解决未捕获的 Swift_TransportException
- javascript - 如何在 webpag 上的外部 javascript 中检索函数的返回值,最好使用 python + selenium?
- php - 如何使用 php pear mailer 将 xml 字符串附加到电子邮件中?
- angular - 使用角度的并行 API 调用