Python 根据当前行的值选择行

Python 根据当前行的值选择行,python,pandas,Python,Pandas,假设我有两个数据框,分别是餐厅和类别。 我正在尝试创建一个新的列,其中将包含位于同一区域且至少有一个共同类别的餐厅数量 我怎样才能做到这一点?以下是我到目前为止所做的 Restaurant contains: id, zone id Zone ... 0 11 H5X ... 1 12 H2A 2 13 H5X 3 14 H53 4 15 H21 ... Category con

假设我有两个数据框,分别是餐厅和类别。 我正在尝试创建一个新的列,其中将包含位于同一区域且至少有一个共同类别的餐厅数量

我怎样才能做到这一点?以下是我到目前为止所做的

Restaurant contains: id, zone
      id    Zone   ... 
0     11    H5X    ...
1     12    H2A  
2     13    H5X
3     14    H53
4     15    H21    ... 



Category contains: id, category
      id    category    ...
0     11    Sushi       ...
1     12    Fast Food
2     13    Sandwich
3     13    Sushi
4     14    Noodle
5     14    Fast Food
6     15    Bakeries    ...
现在,我如何创建一个新的列“交集”到originalDF以产生以下结果:

     id    Zone   intersection
0     11    H5X    1 (since there is one restaurant, id=13, that is in the same zone(H5X 
                                        and have at least one category in common, Sushi)
1     12    H2A    0
3     13    H5X    1 (since there is one restaurant, id =11, that is in the same zone (h5x) andat 
                       least one category in common , sushi)
5     14    H53    0
6     15    H21    0
谁能帮帮我吗?我迷路了。谢谢

import pandas as pd 

# create both datasets
df1 = pd.DataFrame({
    'id': [11, 12, 13, 14, 15],
    'zone': ['H5X', 'H2A', 'H5X', 'H53', 'H21']
})
df1.head()

df2 = pd.DataFrame({
    'id': [11, 12, 13, 13, 14, 14, 15],
    'category': ['Sushi', 'Fast food', 'Sandwich', 'Sushi', 'Noodle', 'Fats food', 'Bakeries']
})
df2.head()

# merge datasets based on restaurant id
df3 = pd.merge(df1, df2, how='left', on=['id'])
df3.reset_index(drop=True, inplace=True)
df3.head()
输出:

输出:

#将计数合并到第一个数据帧以获得所需结果
df4=pd.merge(df1,cnt,how='left',on='zone')

df4['count']=df4['count']。应用(lambda x:0如果x您好,非常感谢您给我这个解决方案。我仍在尝试改变一些东西,我认为我没有解释好。对于餐馆中的x,我试图找到同一区域中与x至少共享一个类别的餐馆的数量。哦,在我写这篇文章时,我想……?我需要做的就是计算发生的次数e、 mhmmm我不确定了,我会用你的代码尝试更多的东西,再次感谢!!!!你的最终输出,例如id=13的行,有2行,我希望它是1行,在交叉点显示1,因为有1行(可能更多)与餐厅id=13位于同一区域的餐厅,其中餐厅至少有一个类别与餐厅13相同。再次感谢您的表达
df4.loc[df4['crossion']==1]
可以帮助您根据交叉点计数筛选数据框。例如
df4.loc[df4['crossion']==2]
将只留下两个交叉点的行。您好,从过去几周以来,我尝试了很多事情。但我似乎仍然无法获得它,我修改了您的代码和所有内容,但我无法获得我想要的Q\u Q。总之,对于每一行,我想获得位于同一区域且在com中至少有一个类别的餐厅id的数量我还在第一步。我合并了DF1和DF2得到DF3。DF1=餐厅id,区域,DF2=餐厅id,类别,DF3=餐厅id,区域,类别。你的代码给出了交叉点,但不是我试图得到的最终结果。你能帮我吗:(
# count repeating zone / category
cnt = df3.groupby(['zone', 'category']).size().to_frame('count')
cnt.head(10)
# merge counts to first dataframe to achieve desired result
df4 = pd.merge(df1, cnt, how='left', on='zone')
df4['count'] = df4['count'].apply(lambda x: 0 if x <=1 else 1)
df4.rename(columns={'count': 'intersection'}, inplace=True)
df4.head()