首页 > 解决方案 > 检查特定列中缺少的行,然后将其添加到数据框中

问题描述

我希望代码检查数据框是否具有 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)

标签: pythonpandas

解决方案


对索引的右连接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

推荐阅读