在dataframe(Python)中搜索同一对

2024-05-14 19:24:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧df1和df2:

df1 = pd.DataFrame({"Name" : ["Alex", "Quentin", "Clara", "Gladis", "Sara" , "Xie", "Kevin"],
                   "City" : ["Seattle", "Seattle", "Paris", "Seattle", "Miami", "Portland", "Miami"]
                   })

df2 = pd.DataFrame({"Name" : ["Clara", "Alex", "Jacob", "Boris", "Kevin" , "White"],
                   "City" : ["Paris", "Seattle", "Portland", "Seattle", "Miami", "Portland"]
                   })

我想知道在西雅图和迈阿密这两个城市里有多少对夫妇是相同的。 在我上面的例子中,程序必须返回2,因为我有alex seattle和kevin miami

没有考虑克拉拉·帕里斯夫妇,因为我的研究只关注西雅图和迈阿密两个城市的同性伴侣


Tags: 数据namecitydataframepddf1df2paris
2条回答

考虑到你只想要来自迈阿密和西雅图的同一对情侣,你可以将他们合并到Column City,因为这是必要的

df = pd.merge(df1,df2 , on = "City")

然后 对同名的数据帧进行子集,并过滤掉迈阿密和西雅图的情侣

ss = df.loc[df['Name_x']== df['Name_y']] # This happens when both dataframes have same column names 
ss1 = ss.loc[((ss['City'] =='Seattle') | (ss['City']=='Miami') )]

len(ss1) # This returns the number of couple.

过滤西雅图或迈阿密的城市
将名称设置为索引
在列上连接
并获取结果数据帧的长度

pd.concat([frame.query("City==['Seattle','Miami']").set_index("Name")
           for frame in  (df1, df2)]
          ,axis=1, join='inner').shape[0]

2

或者,您可以只使用索引,而不运行concat

first, last = [frame.query("City==['Seattle','Miami']")
                    .set_index("Name")
               for frame in  (df1, df2)]
#get the length
len(first.index.intersection(last.index))

相关问题 更多 >

    热门问题