python - 检查特定列中缺少的行,然后将其添加到数据框中
问题描述
我希望代码检查数据框是否具有 period_list 的所有元素。如果不是我想将该元素添加到数据框中,则与该元素关联的值将为零。我写了这个,但它不起作用数据框:test_1
Period A B C
0 2018 - Q2 1 0 1
1 2018 - Q3 1 1 1
2 2018 - Q4 0 1 1
3 2019 - Q1 0 0 0
4 2019 - Q2 0 0 1
5 2019 - Q3 1 0 1
6 2019 - Q4 0 1 1
7 2020 - Q1 1 0 1
8 2020 - Q2 0 0 0
我的代码
period_list = ['2018 - Q1', '2018 - Q2', '2018 - Q3', '2018 - Q4', '2019 - Q1', '2019 - Q2', '2019 - Q3', '2019 - Q4', '2020 - Q1', '2020 - Q2', '2020 - Q3', '2020 - Q4', '2021 - Q1']
for row in period_list:
if row not in test_1.iloc[:, 0]:
test_1.append(row)
解决方案
对索引的右连接df.merge()
会自动执行此操作,按索引合并两个数据帧:
df.merge(pd.DataFrame(index=period_list), left_index=True, right_index=True, how='right')
A B C
2018 - Q1 NaN NaN NaN
2018 - Q2 1.0 0.0 1.0
2018 - Q3 1.0 1.0 1.0
2018 - Q4 0.0 1.0 1.0
2019 - Q1 0.0 0.0 0.0
2019 - Q2 0.0 0.0 1.0
2019 - Q3 1.0 0.0 1.0
2019 - Q4 0.0 1.0 1.0
2020 - Q1 1.0 0.0 1.0
2020 - Q2 0.0 0.0 0.0
2020 - Q3 NaN NaN NaN
2020 - Q4 NaN NaN NaN
2021 - Q1 NaN NaN NaN
然后正如@anky 所写,您想.fillna(0,downcast='infer')
将 NaN 转换为 0,并从浮点数向下转换为整数:
A B C
2018 - Q1 0 0 0
2018 - Q2 1 0 1
2018 - Q3 1 1 1
2018 - Q4 0 1 1
2019 - Q1 0 0 0
2019 - Q2 0 0 1
2019 - Q3 1 0 1
2019 - Q4 0 1 1
2020 - Q1 1 0 1
2020 - Q2 0 0 0
2020 - Q3 0 0 0
2020 - Q4 0 0 0
2021 - Q1 0 0 0
推荐阅读
- ios - 如何访问 Algolia 索引和搜索属性?
- reactjs - React + Laravel - 未定义设置状态
- java - java.lang.IllegalStateException:Bean 名称“会话”的 BindingResult 和普通目标对象都不能用作请求属性
- node.js - 如何使用 nodejs 在 PAYPAL API 中自动捕获授权订单?
- vb.net - Picturebox绘图问题
- javascript - 在路线块外声明变量,是否安全?
- javascript - 如何使用 Selenium 设置 Jest 以并行运行一些测试和顺序运行一些测试?
- docker - 如何在 gitlab-ci.yml 中声明两个具有不同 Docker 映像的作业
- woocommerce - 如何在 WooCommerce 中的“添加到购物车”按钮旁边添加查看产品详细信息链接?
- tensorflow - 如何在张量流中每次迭代后添加