我有一个数据框,如果它们存在于另一个df中,我想对其进行比较。
after_h.sample(10, random_state=1)
movie year ratings
108 Mechanic: Resurrection 2016 4.0
206 Warcraft 2016 4.0
106 Max Steel 2016 3.5
107 Me Before You 2016 4.5
我想比较上面的电影是否存在于另一个df中。
FILM Votes
0 Avengers: Age of Ultron (2015) 4170
1 Cinderella (2015) 950
2 Ant-Man (2015) 3000
3 Do You Believe? (2015) 350
4 Max Steel (2016) 560
我想要这样的东西作为最终输出:
FILM votes
0 Max Steel 560
答案 0 :(得分:2)
有两种方法:
获取部分匹配(FILM .startswith()标题)或FILM .contains()标题的行索引。
df1[ df1.movie.apply( lambda title: df2.FILM.str.startswith(title) ).any(1) ]
df1[ df1['movie'].apply(lambda title: df2['FILM'].str.contains(title)).any(1) ]
movie year ratings
106 Max Steel 2016 3.5
或者,如果将复合字符串列df2 ['FILM']转换为其两个组成列merge()
,则可以使用movie_title (year)
。
。
# see code at bottom to recreate your dataframes
df2[['movie','year']] = df2.FILM.str.extract('([^\(]*) \(([0-9]*)\)')
# reorder columns and drop 'FILM' now we have its subfields 'movie','year'
df2 = df2[['movie','year','Votes']]
df2['year'] = df2['year'].astype(int)
df2.merge(df1)
movie year Votes ratings
0 Max Steel 2016 560 3.5
(在此以及在Python聊天室中从@ user3483203那里获得了很多帮助)
重新创建数据框的代码:
import pandas as pd
from pandas.compat import StringIO
dat1 = """movie year ratings
108 Mechanic: Resurrection 2016 4.0
206 Warcraft 2016 4.0
106 Max Steel 2016 3.5
107 Me Before You 2016 4.5"""
dat2 = """FILM Votes
0 Avengers: Age of Ultron (2015) 4170
1 Cinderella (2015) 950
2 Ant-Man (2015) 3000
3 Do You Believe? (2015) 350
4 Max Steel (2016) 560"""
df1 = pd.read_csv(StringIO(dat1), sep='\s{2,}', engine='python', index_col=0)
df2 = pd.read_csv(StringIO(dat2), sep='\s{2,}', engine='python')
答案 1 :(得分:1)
给定输入数据帧df1
和df2
,您可以通过pd.Series.isin
使用布尔索引。要对齐电影字符串的格式,您需要先将电影和年份从df1
连接起来:
s = df1['movie'] + ' (' + df1['year'].astype(str) + ')'
res = df2[df2['FILM'].isin(s)]
print(res)
FILM VOTES
4 Max Steel (2016) 560
答案 2 :(得分:0)
smci的选项1即将出现,以下对我有用:
<android.support.design.widget.NavigationView
...
app:itemIconTint="@android:color/black"
... />
说明:
在df1中创建一个投票栏
将lambda应用于df1中的每个电影字符串
lambda查找df2,选择df2中电影以电影标题开头的所有行
选择生成的df2子集的“投票”列
使用any(0)取得此列中的第一个值