gpt4 book ai didi

python - 需要检查一个数据帧是否是另一个数据帧的子集

转载 作者:行者123 更新时间:2023-12-01 07:40:25 27 4
gpt4 key购买 nike

我有 2 个 csv 文件(csv1、csv2)。在 csv2 中,可能会添加新的列或行。我需要验证 csv1 是否是 csv2 的子集。作为子集,整行应该出现在文件中,并且新行或行中的元素应该被忽略。

csv1:

c1,c2,c3
A,A,6
D,A,A
A,1,A

csv2:

c1,c2,c3,c4
A,A,6,L
A,changed,A,L
D,A,A,L
Z,1,A,L
Added,Anew,line,L

我正在尝试的是:

df1 = pd.read_csv(csv1_file)
df2 = pd.read_csv(csv2_file)
matching_cols=df1.columns.intersection(df2.columns).tolist()

sorted_df1 = df1.sort_values(by=list(matching_cols)).reset_index(drop=True)
sorted_df2 = df2.sort_values(by=list(matching_cols)).reset_index(drop=True)


print("truth data>>>\n",sorted_df1)
print("Test data>>>\n",sorted_df2)


df1_mask = sorted_df1[matching_cols].eq(sorted_df2[matching_cols])
# print(df1_mask)
print("compared data>>>\n",sorted_df1[df1_mask])

它给出的输出为:

truth data>>>
c1 c2 c3
0 A 1 A
1 A A 6
2 D A A

Test data>>>
c1 c2 c3 c4
0 A A 6 L
1 A changed A L
2 Added Anew line L
3 D A A L
4 Z 1 A L

compared data>>>
c1 c2 c3
0 A NaN NaN
1 A NaN NaN
2 NaN NaN NaN

我想要的是:

compared data>>>
c1 c2 c3
0 Nan NaN NaN
1 A A 6
2 D A A

请帮忙。

谢谢

最佳答案

如果需要最后一行缺失值,因为不匹配,请使用 DataFrame.merge使用左连接和 indicator 参数,然后通过掩码和 rmove 辅助列设置缺失值_merge:

matching_cols=df1.columns.intersection(df2.columns)

df2 = df1[matching_cols].merge(df2[matching_cols], how='left', indicator=True)
df2.loc[df2['_merge'].ne('both')] = np.nan
df2 = df2.drop('_merge', axis=1)
print (df2)

c1 c2 c3
0 A A 6
1 D A A
2 NaN NaN NaN

关于python - 需要检查一个数据帧是否是另一个数据帧的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56748606/

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