通过与另一个数据帧重叠来对熊猫数据帧进行子集

den*_*ble 4 python pandas

对于以下两个数据帧:

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列中的值重叠的namedf1,即生成以下数据框:

     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)

jez*_*ael 6

您可以使用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)