Python 通过与另一个数据帧重叠来创建数据帧的子集

Python 通过与另一个数据帧重叠来创建数据帧的子集,python,pandas,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.]

对于以下两个数据帧:

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
我只想保留
df2
name
列中的值与
df1
name
列中的值重叠的行,即生成以下数据帧:

     name  value
0    A    1.0
1    C    3.0
我已经尝试了很多方法,但我对python和pandas还不熟悉,不喜欢R的语法。为什么这行代码不起作用,什么会起作用

df2[df2["name"] in df1["name"]]
您可以使用:

另一个更快的解决方案包括:


与实际数据中可能有用的方法稍有不同,可以使用“内部联接”(交叉点)和la SQL。如果两个数据帧中的列不重复(例如,使用某个公共键合并两个不同的数据集),则更有用

df1=pd.DataFrame({'name':pd.Series([“A”,“B”,“C”]),'value':pd.Series([1,2,3.]))
df2=pd.DataFrame({'name':pd.Series([“A”、“C”、“D”]),'value':pd.Series([1,3,5.]))
#假设对于join,您应该能够告诉join on='',这里是'name',这里是,
#但不是为我工作。
df1.set_索引('name',inplace=True)
df2.set_索引('name',inplace=True)
df1.join(df2,how='internal',rsuffix='uother')
#其他价值
#名字
#A 1.01.0
#C3.03.0
how
更改为
outer
将为您提供两者的交叉点,
left
仅用于
df1
行,
right
用于
df2

print (df2[df2["name"].isin(df1["name"])])
  name  value
0    A    1.0
1    C    3.0
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
df1 = pd.DataFrame({'name': pd.Series(["A", "B", "C"]), 'value': pd.Series([1., 2., 3.])})
df2 = pd.DataFrame({'name': pd.Series(["A", "C", "D"]), 'value': pd.Series([1., 3., 5.])})

# supposedly for the join you should be able to tell join on='<column_name>', 'name' here, 
# but wasn't working for me.
df1.set_index('name', inplace=True)
df2.set_index('name', inplace=True)

df1.join(df2, how='inner', rsuffix='_other')

#       value  value_other
# name                    
# A       1.0          1.0
# C       3.0          3.0