我有相同的数据集,但在不同的星期(所以后面的星期包含新的行)。我想将新的行附加到原始的dataframe,以创建一个大的dataframe,其中所有的行都是唯一的,没有重复。我不能只取最后一周,因为有些行会在几周内被删除。
我尝试使用下面的代码,但我的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)
有没有人看到哪里出错了?
2条答案
按热度按时间j7dteeu81#
如果我理解了你的问题,你只是想从一个 Dataframe 添加唯一的行到另一个 Dataframe 。我不认为有任何需要迭代通过键像你这样做。有一个例子在这个问题上,我认为可以帮助你,我认为这是概念上更容易遵循1。我会尝试通过一个例子来使它更清楚。
如果你有一个dataframe A:
以及 Dataframe B:
这两个 Dataframe 的前两行相同,但最后一行不同。如果您想将所有唯一行放入一个 Dataframe 中,则可以首先从其中一个 Dataframe 中获取所有唯一行。因此,对于此示例,您可以获取 Dataframe B中的唯一行,在此示例中将其称为df_diff。执行此操作的代码为
上面这行代码创建了一个布尔掩码,然后使用~求反,这样你就可以得到数据框B中col 1值不在数据框A中的所有行。
然后,你可以将这个数据框df_diff与第一个数据框A合并。我们可以称之为df_full。这一步是这样完成的:
ignore_index=True只是重置结果 Dataframe 的索引。这将给予你:
现在,上面的数据框具有数据框B中的新行加上来自数据框A的原始行。
我认为这将适用于您的情况,并且可能会减少代码行。
7xllpg7q2#
还有一个方法
pandas.DataFrame.combine_first
,它可以同时执行多个操作:语法:
df_1.combine_first(df_2)
参考:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.combine_first.html