【发布时间】:2017-01-01 21:53:35
【问题描述】:
我的目标
我正在尝试创建一个新数据框,该数据框是通过比较来自不同数据框的列而形成的。
更具体地说,当ColumnA 中的列值与ColumnB 中的列值不同/不存在时, 整行将被忽略且不包含在new_df 中
数据框
>>> df
ColumnA Stats
0 Cake 872
1 Cheese Cake 912
2 Egg 62
3 Raspb Jam 091
4 Bacon 123
5 Bread 425
>>> df1
ColumnB
0 Cake
1 Cheese Cake
3 Raspberry Jam
4 Bacon
我的尝试
由于我不确定如何实现这一点,我已尽力制作以下内容,尽管我知道它可能无法达到我的预期输出:
new_df = df[df['ColumnA'].str.strip() in df1['ColumnB'].str.split()]
错误:
TypeError: 'Series' objects are mutable, thus they cannot be hashed
预期输出
如您所见,对于df1 中不存在的列值,行将从df 中删除。在这种情况下,Bread 和 Egg 都不存在,因此,new_df 不包含它们的 rows
>>> new_df
ColumnA Stats
0 Cake 872
1 Cheese Cake 912
3 Raspberry Jam 091
4 Bacon 123
编辑:
Raspb Jam 也保留在新的 DF 中,因为它在非常基本的层面上类似于 Raspberry Jam。
【问题讨论】:
-
正如@Psidom 指出的那样,您需要在
ColumnA和ColumnB上使用merge。默认模式是how='inner',这正是你想要的。 -
@Psidom 这消除了比预期更多的行
-
@3novak 他的建议似乎不起作用。我已经编辑了 DF,错过了一个细节。我正在寻找标题中所述的类似匹配项:)
-
@Psidom 我已经编辑了 DF,错过了一个细节。
-
如果我理解正确并且您只需要字符串相同,请尝试:
df.ColumnA = df. ColumnA.map(lambda x: x.replace('Raspb Jam', 'Raspberry Jam'))。然后尝试合并。
标签: python python-2.7 pandas dataframe