2 回答
TA贡献1846条经验 获得超7个赞
使用 merge
idx=df.loc[:,'input'].merge(bla,indicator =True).index
df1=df.loc[df.index.difference(idx),:]
df2=df.loc[idx]
df1
Out[683]:
input action result
1 2 3 4 action 1 2 3 4
1 10 20 30 40 b 90 90 90 90
2 90 90 90 90 c 91 91 91 91
df2
Out[684]:
input action result
1 2 3 4 action 1 2 3 4
0 11 22 33 44 a 10 20 30 40
TA贡献1851条经验 获得超3个赞
在没有您的数据的情况下,您可以通过首先执行 aleft merge并包括indicator=True和之后过滤来实现这一点left_only:
# Example data
np.random.seed(0)
left = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': np.random.randn(4)})
right = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value': np.random.randn(4)})
print(left)
print(right)
key value
0 A 1.764052
1 B 0.400157
2 C 0.978738
3 D 2.240893
key value
0 B 1.867558
1 D -0.977278
2 E 0.950088
3 F -0.151357
执行左连接
df_join = pd.merge(left, right, on='key', how='left', indicator=True)
print(df_join)
key value_x value_y _merge
0 A 1.764052 NaN left_only
1 B 0.400157 1.867558 both
2 C 0.978738 NaN left_only
3 D 2.240893 -0.977278 both
仅在左侧过滤
unmatch = df_join[df_join['_merge'] == 'left_only']
print(unmatch)
key value_x value_y _merge
0 A 1.764052 NaN left_only
2 C 0.978738 NaN left_only
添加回答
举报