问题描述
我有相同的数据集,但是在不同的星期内(因此以后的星期包含新行)。我想将新行附加到原始数据框,以创建一个具有所有唯一行且无重复的大数据框。我不能只花最后一个星期,因为有些星期会被删除。
我尝试使用以下代码,但是我的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中的原始行。
我认为这将适合您的情况,并且代码行可能更少。