gpt4 book ai didi

python - Pandas :合并两个数据框并保留来自单个数据框的非交叉数据

转载 作者:行者123 更新时间:2023-11-29 12:03:07 24 4
gpt4 key购买 nike

愿望:

我想要一种方法来合并两个数据框并保留指定数据框中的非交叉数据。

问题:

我有重复数据,我希望这一行能够删除重复数据:

 final_df = new_df[~new_df.isin(previous_df)].dropna()

示例数据和数据测试:

 record = Record(1000, 9300815, '<redacted type>', '<redacted id>')
test_df = pd.DataFrame([record])
if not final_df.empty:

# this produces an empty data frame
empty_df = test_df[test_df.isin(final_df)].dropna()

# this produces the record
record_df = final_pdf[final_pdf.col01 == record.col01]

背景:

我正在加载 xml 数据并将 xml 文件转换为几种不同的记录类型,如命名元组。我将每种记录类型拆分为自己的数据框。然后我通过构造 previous_df 将 xml 文件中的当前数据集与已经加载到数据库中的数据进行比较:

 previous_df = pd.read_sql_table(table_name, con=conn, schema=schema, columns=columns)

列是根据命名元组中的字段动态创建的。数据库模式是使用 sqlalchemy 生成的,当我认为数据库中存在重复项时,我添加了 UniqueConstraint 来管理。

在此先感谢您提供的任何帮助。

最佳答案

从两个数据框中保存单个记录:

首先尝试concat dataframes,这样你就可以确定你会有重复项。然后应用 drop_duplicates,我想你最终会得到你想要的。请参见下面的示例:

#Create dummy data
df1 = pd.DataFrame(columns=["A","B"],data=[[1,2],[3,4],[5,6]])
print(df1)

A B
0 1 2
1 3 4
2 5 6

df2 = pd.DataFrame(columns=["A","B"],data=[[3,4],[5,6],[7,8],[9,10]])
print(df2)

A B
0 3 4
1 5 6
2 7 8
3 9 10

#Concatenate dataframes
df = pd.concat([df1,df2],axis=0)
print(df)

A B
0 1 2
1 3 4
2 5 6
0 3 4
1 5 6
2 7 8
3 9 10

#Drop duplicates
df = df.drop_duplicates(keep=False)
print(df)

A B
0 1 2
2 7 8
3 9 10

仅从一个数据帧中保留单个记录:

如果您只想保留新数据帧中的数据,只需使用一个肮脏的小技巧:concat 旧数据帧两次,这样所有旧记录都将符合 drop_duplicates 条件。像这样:

#Concatenate dataframes with old dataframe taken twice!
df = pd.concat([df1,df1,df2],axis=0)

#Now you will only end up with the records from second dataframe
df = df.drop_duplicates(keep=False)
print(df)

A B
2 7 8
3 9 10

关于python - Pandas :合并两个数据框并保留来自单个数据框的非交叉数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44781950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com