当前位置: 首页 > 知识库问答 >
问题:

数据帧与另一个重叠的子集[重复]

关志勇
2023-03-14

对于以下两个数据帧:

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

我只想保留df2name列中的值与df1name列中的值重叠的行,即生成以下数据帧:

     name  value
0    A    1.0
1    C    3.0

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

df2[df2["name"] in df1["name"]]

共有2个答案

卫深
2023-03-14

稍微不同的方法可能对您的实际数据有用,您可以使用内连接(交叉点)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

丁阳羽
2023-03-14

您可以使用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
 类似资料:
  • 我有两个数据框,都包含英文和中文单词字符串,我想知道其中一个是另一个的子集:

  • 我有两个Pandas Dataframe和,其中是的一部分,我想创建一个Dataframe,其中包含中的code>。 以下是一个例子: 注: 我的DataFrame可能有多个列,但是必须仅在列上进行匹配。

  • 下面是数据示例: 我需要将具有相同道具值的重复行删除到另一个数据框,并将它们从原始文件中删除。 所以另一个数据框应该是这样的(重复的行不应该重复): df=df.drop_duplicates()删除一个重复的行,但不是像这样的第二个:

  • 我有一个df,看起来像这样: 所需的输出如下所示: 我试图删除基于列B的重复行。然而,当我运行时 我得到以下错误: 我正在从python 3运行pandas 0.19.1,因此我在这里查看了文档:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.drop_duplicates.html 对于,我没有最模糊的

  • 情况: 两个数据帧(df1和df2)具有相同的三个索引,例如“A”、“B”、“C”。df1和df2的列数不同。df1和df2中的所有单元格都填充了float类型的数据。 DF1: DF2: 目标: 从df2中选择的列(例如“BBB”)与df1的每列相加后,结果应存储在新的数据帧(df_new)中。df_new的格式应为df1(列数和行数),并具有与df1相同的列名和索引。 new_df: 我的做法