通过与另一个重叠的熊猫数据框子集[重复]
Posted
技术标签:
【中文标题】通过与另一个重叠的熊猫数据框子集[重复]【英文标题】:Subset pandas dataframe by overlap with another [duplicate] 【发布时间】:2017-05-05 23:32:48 【问题描述】:对于以下两个数据框:
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"]]
【问题讨论】:
【参考方案1】:你可以使用isin
:
print (df2[df2["name"].isin(df1["name"])])
name value
0 A 1.0
1 C 3.0
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
【讨论】:
【参考方案2】:可能对您的实际数据有用的稍微不同的方法,您可以使用“内连接”(交集)a 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.]))
# 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
将how
更改为outer
将为您提供两者的交集,left
仅用于df1
行,right
用于df2
。
【讨论】:
以上是关于通过与另一个重叠的熊猫数据框子集[重复]的主要内容,如果未能解决你的问题,请参考以下文章