Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:如何在数据框中添加表示两个属性相交的列_Python_Pandas_Feature Extraction_Feature Engineering - Fatal编程技术网

Python 熊猫:如何在数据框中添加表示两个属性相交的列

Python 熊猫:如何在数据框中添加表示两个属性相交的列,python,pandas,feature-extraction,feature-engineering,Python,Pandas,Feature Extraction,Feature Engineering,假设我有2个csv文件(非常大的文件) 第一个文件表示餐厅,有6个属性餐厅id,名称,星级,城市,区域,关闭 第二个文件表示餐厅的类别,有两个属性restaurant\u id和category 因此,我想做的基本上是在我的功能中添加一个名为区域\类别\交叉点的列,该列告诉我同一区域(区域)内与相关餐厅至少共享一个类别的餐厅数量。 因为这是我第一次使用熊猫图书馆,我在操作桌子时有点不太流利。我这样做是为了计算出该地区与该餐厅相关联的餐厅数量,并将其添加到我的功能栏中 餐厅['nb_

假设我有2个csv文件(非常大的文件)

  • 第一个文件表示餐厅,有6个属性
    餐厅id
    名称
    星级
    城市
    区域
    关闭

  • 第二个文件表示餐厅的类别,有两个属性
    restaurant\u id
    category
因此,我想做的基本上是在我的功能中添加一个名为
区域\类别\交叉点
的列,该列告诉我同一区域(区域)内与相关餐厅至少共享一个类别的餐厅数量。

因为这是我第一次使用熊猫图书馆,我在操作桌子时有点不太流利。我这样做是为了计算出该地区与该餐厅相关联的餐厅数量,并将其添加到我的功能栏中


餐厅['nb_餐厅\区域]]=餐厅。groupby('zone')['zone']。transform('size'))
食肆.总目()
功能=餐厅[['restaurant_-id'、'moyenne_-etoiles'、'ville'、'zone'、'ferme'、'nb_-restaurants_-zone']]复印件()
特征.head()
#编辑
合并=餐厅。合并(类别,在class='restaurant\u id'上)
合并.总目()

我考虑添加
category.csv
文件,将其与餐厅合并,并将类别与相应的id进行映射,然后想出一种方法来应用第二个条件(与相关餐厅至少共享一个类别)。。。但是我真的不知道如何做这些事情

谢谢

试试这个

# sample data
# (it's not exactly your provided data
# but it is better to show how the code works)
# please always provide a callable line of code
# you could get it with `df.head().to_dict('split')`
rest = pd.DataFrame({
    'id': [1, 2, 3, 4, 5],
    'name': ['Denny\'s', 'Ike\'s Love & Sandwiches', 'Midori Japanese',
        'Pho U', 'John & Sons Oysters'],
    'avg_stars': [2.5, 4, 3.5, 3.5, 4],
    'city': ['Las Vegas', 'Phoenix', 'Calgary', 'Toronto', 'Toronto'],
    'zone': ['a', 'a', 'b', 'b', 'a']
})
cats = pd.DataFrame([
    [1, ['Breakfast', 'Dinners', 'American']],
    [2, ['Sandwiches', 'American']],
    [3, ['Japanese']],
    [4, ['Japanese']],
    [5, ['American', 'Seafood']]
], columns=['id', 'category']).explode('category')
代码

# add zone to categories dataframe
cats2 = cats.merge(rest[['id', 'zone']], on='id')

# add count for zone & category
cats2['zone_cat_count'] = (
    cats2.groupby(['zone', 'category'])
    .transform('count')
)

# merge with rest dataframe
rest = rest.merge(
    cats2.groupby('id')['zone_cat_count'].max()
    , on='id'
)
输出

   id                     name  avg_stars       city zone  zone_cat_count
0   1                  Denny's        2.5  Las Vegas    a               3
1   2  Ike's Love & Sandwiches        4.0    Phoenix    a               3
2   3          Midori Japanese        3.5    Calgary    b               2
3   4                    Pho U        3.5    Toronto    b               2
4   5      John & Sons Oysters        4.0    Toronto    a               3

@RichieV我想做的基本上是在我的功能中添加一个列,告诉我同一区域(区域)内与该餐厅至少共享一种食物的餐厅数量。我不知道如何在这里创建一个表来显示。你知道,但这很简单。@RichieV ohh你看到的那些表格只是标题,它们大得多^^^请始终在代码块中显示表格,将无法与文本共享的图片保留为图表和such@RichieV是的,nb_餐厅区已经显示了同一区域内有多少家餐厅,但我想知道同一区域(区域)内与该餐厅至少共享一种食品的餐厅数量。我知道,请更改代码块的图像,包括
df.head()
df2[df2['restaurant\u id'].isin(df.head()['restaurant\u id'])]
谢谢你,我用我的桌子尝试了这些步骤,似乎效果不错。如果我已经将类别添加到rest数据框中(而不是像您那样将区域添加到类别中),并使用.groupby('id')['zone\u cat\u count'].max(),on='id'进行计数,也可以吗?还有,为什么要在这里使用.max?来正确显示表格,所以我只需使用
df.head().to_dict('split')
,我想在这里共享什么,并将文本直接复制到代码块上?这将给出数据框的前五行,请参阅。。。可能前5行没有显示数据的复杂性,在这种情况下,包括更多带有
df.head(20)
的行,或者创建一个新的玩具数据框。例如,categories数据框的前5行对于此示例来说是不够的,您需要所有相关的
restaurant\u id
如果我将类别添加到其余数据框中(而不是像您那样将区域添加到类别中),并使用.groupby('id')['zone\u cat\u count'].max(),on='id'进行计数,也可以吗?你为什么要用max?