对于以下两个数据帧:
df1 = pd.DataFrame({'name': pd.Series(["A", "B", "C"]), 'value': pd.Series([1., 2., 3.])})
name value
0 A 1.0
1 B 2.0
2 C 3.0
df2 = pd.DataFrame({'name': pd.Series(["A", "C", "D"]), 'value': pd.Series([1., 3., 5.])})
name value
0 A 1.0
1 C 3.0
2 D 5.0
Run Code Online (Sandbox Code Playgroud)
我只想保留列中df2的值与name列中的值重叠的name行df1,即生成以下数据框:
name value
0 A 1.0
1 C 3.0
Run Code Online (Sandbox Code Playgroud)
我已经尝试了多种方法,但我是 python 和 pandas 的新手,不喜欢来自 R 的语法。为什么这行代码不起作用,什么会?
df2[df2["name"] in df1["name"]]
Run Code Online (Sandbox Code Playgroud)
您可以使用isin:
print (df2[df2["name"].isin(df1["name"])])
name value
0 A 1.0
1 C 3.0
Run Code Online (Sandbox Code Playgroud)
另一个更快的解决方案numpy.intersect1d:
val = np.intersect1d(df2["name"], df1["name"])
print (val)
['A' 'C']
print (df2[df2.name.isin(val)])
name value
0 A 1.0
1 C 3.0
Run Code Online (Sandbox Code Playgroud)