【发布时间】:2020-09-06 09:04:40
【问题描述】:
我有 2 个不同长度的 dataframes。我想比较和删除 df1 中的不可用值(rows)。
这是一个例子:
df1 = pd.DataFrame({'Filename':['image1','image1','image2','image3'],
'Name':['Dog','Cat','Cat', 'Cat'],
'values':['2','3','4','5'] })
df2 = pd.DataFrame({'Filename':['image1','image2','image3'],
'Name':['Dog','Cat', 'Cat'],
'values':['5','6','7'] })
df1
Filename Name values
0 image1 Dog 2
1 image1 Cat 3
2 image2 Cat 4
3 image3 Cat 5
df2
Filename Name values
0 image1 Dog 5
1 image2 Cat 6
2 image3 Cat 7
我期待 2 个数据帧(df1 和 df2)具有相同的长度和相同的 Filename 和 Name,如下所示。我的目标是将df1 和df2 的values 列与相同的Filename 和Name 进行比较。
df1
Filename Name values
0 image1 Dog 2
2 image2 Cat 4
3 image3 Cat 5
df2
Filename Name values
0 image1 Dog 5
1 image2 Cat 6
2 image3 Cat 7
我尝试将每一行与相应的 df 进行比较,如果不可用则删除。 (这显然不是办法)
for i, j in df1.iterrows():
for m, n in df1.iterrows():
if m['Filename'] == i['Filename']:
if m['LabelName'] == i['LabelName']:
pass
else:
print('delete')
df2=df2.drop(i)
df1=df1.sort_values('Filename')
df2=df2.sort_values('Filename')
break
我还尝试实现 groupby 并与行进行比较,我遇到了ValueError: Can only compare identically-labeled Series objects,因为索引不一样。
有人可以帮我解决这个问题吗?我尝试搜索类似的问题,但没有遇到任何问题。
【问题讨论】:
-
你的预期输出是什么?
-
++添加了更多描述
-
你应该使用pd.merge。像
df1.merge(df2, on=['Filename', 'Name'], how='inner')这样的东西应该可以工作。但是,您的问题肯定是重复的,您可以在其他地方找到答案:) -
我觉得自己很愚蠢。谢谢
标签: python pandas data-science string-comparison data-processing