仅追加尚未在pandas数据框中包含的行

问题描述

我有相同的数据集,但是在不同的星期内(因此以后的星期包含新行)。我想将新行附加到原始数据框,以创建一个具有所有唯一行且无重复的大数据框。我不能只花最后一个星期,因为有些星期会被删除。

我尝试使用以下代码,但是我的final_info数据框仍然包含一些非唯一值

final_info = data[list(data.keys())[-1]]['all_info']
    for week in reversed(data.keys()):
    df_diff = pd.concat([data[week]['all_info'],final_info]).drop_duplicates(subset='project_slug',keep=False)
    final_info = final_info.append(df_diff).reset_index(drop=True)

有人看到哪里出了问题吗?

解决方法

如果我理解您的问题,那么您只是想将一个数据帧中的唯一行添加到另一数据帧中。我认为不需要像您所做的那样遍历所有键。我认为有一个示例可以帮助您,并且从概念上讲,1更容易理解。我将尝试通过一个例子来使其更加清晰。

因此,如果您有一个数据框A:

col1  col2
1     2
2     3
3     4

和数据框B:

col1  col2
1     2
2     3
6     4

这两个数据帧的前两行相同,但后几行不同。如果要将所有唯一行都放入一个数据框中,则可以首先从其中一个数据框中获得所有唯一行。因此,对于此示例,您可以在数据帧B中获得唯一行,在此示例中将其称为df_diff。为此的代码将是

df_diff = B[~B.col1.isin(A.col1)]

output: col1  col2
        6     4

上面的代码行将其称为布尔掩码,然后使用〜取反,以便获得数据框B中所有col1值不在数据框A中的行。

然后可以将该数据帧df_diff与第一个数据帧A合并。我们可以将其称为df_full。此步骤完成:

df_full = pd.concat([A,df_diff],ignore_index=True)

ignore_index = True只是重置结果数据帧的索引。这会给你:

col1  col2
1     2
2     3
3     4
6     4

现在,上述数据框在数据框B中具有新行,再加上数据框A中的原始行。

我认为这将适合您的情况,并且代码行可能更少。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...