python - 当数据框 B 中的列值不相似时,从数据框 A 中删除行

标签 python python-2.7 pandas dataframe

我的目标

我正在尝试创建一个新的数据框,该数据框是通过比较不同数据框的列而形成的。

更具体地说,当 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 中删除。在本例中,BreadEgg 都不存在,因此 new_df 不包含它们的

>>> new_df
                ColumnA         Stats
0               Cake            872
1               Cheese Cake     912  
3               Raspberry Jam   091
4               Bacon           123
<小时/>

编辑:

Raspb Jam 也保留在新的 DF 中,因为它在非常基础的层面上与 Raspberry Jam 类似

最佳答案

您可以使用映射函数来提供显式查找。

df = DataFrame( {'ColumnA' : ['Cake' ,'Cheese Cake','Egg' , 'Raspb Jam' ,'Bacon' ,'Bread'],'Value' : [872,912,62,91,123, 425]})
df1 = DataFrame(['Cake' ,'Cheese Cake','Raspberry Jam','Bacon'],columns=['ColumnB'])
value_map = {'Raspberry Jam' : 'Raspb Jam' }
df1.ColumnB = df1.ColumnB.map(lambda x : value_map.get(x,x))
df1.rename(columns={'ColumnB' : 'ColumnA'},inplace=True)
df.merge(df1)
   ColumnA  Value
0         Cake    872
1  Cheese Cake    912
2    Raspb Jam     91
3        Bacon    123

或者,使用 left_on 和 right_on 参数指定要合并的列名称。

df.merge(df1,how='inner',left_on='ColumnA',right_on='ColumnB')[['ColumnA','Value']]

关于python - 当数据框 B 中的列值不相似时,从数据框 A 中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41419371/

相关文章:

Python通过ini记录到文件创建空日志文件

python - Pandas:缩短多列的字符串

python - 如何使用 pandas 从多个 CSV 文件中获取特定列

python - TDD - 初学者问题和绊脚石

Python:带有枚举的 os.walk()

python - 如何为下面给出的代码添加 "format"?

python - 超出 Django 最大递归深度

python - 无法从 PyCharm 中的特定文件夹导入

python - 检查 Numpy 数组(和 Pandas DataFrame)中的所有元素并有选择地更改

python - 情节不会在 Jupyter 中显示