试图从数据框A的列A获取值[ID]的列表与数据框B的列B的值[ID]不匹配。数据框A的列A仅具有该值的1个实例-其中列B作为数据框B,可以具有值的多个实例。
我想删除一个数据框,该数据框具有数据框A中所有行的值与数据框B中不匹配的行。
这就是我得到的-但必须进行许多比赛。
def get_hours_id(labor_excel, people_excel):
df = pd.read_excel(labor_excel)
df1 = pd.read_excel(people_excel)
internal_id_people_list = df1['ID']
internal_id_list = df['ID']
non_match_id = set(internal_id_people_list).difference(internal_id_list)
for id in non_match_id:
result = df1[df1['ID'] == id]
print(result)
数据帧A
Column A Column B Column C
int(123) name(mike) department A
int(234) name(Joe) department B
int(567) name(Jane) department A
数据框B
Column A Column B Column C
int(123) name(mike) department A
int(123) name(Mike) department A
int(567) name(Jane) department B
int(567) name(Jane) department B
int(567) name(Jane) department B
新数据框(结果)
Column A Column B Column C
int(234) name(Joe) department B
答案 0 :(得分:1)
这取决于数据的大小,但是如果数据帧很大,最好的解决方案可能是进行简单的连接并删除匹配的内容
df_B['flag'] = 1
unmacthed = df_A.merge(df_B, how='left').query('flag != flag')
unmacthed = unmacthed.drop('flag',axis=1)