Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.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_Numpy_Dataframe - Fatal编程技术网

Python 如何将子项与数据框架中的父项关联?

Python 如何将子项与数据框架中的父项关联?,python,numpy,dataframe,Python,Numpy,Dataframe,我在python和dataframe方面遇到了一个小问题。 我如何循环浏览该列,并使用“类型”数据将儿童(橙色、香蕉和Avocades)与父母的“水果”联系起来,将儿童(汉堡、薯条)与父母的“快餐”联系起来 +-----------+------+----------+-----------+ | Parent_ID | ID | Type | Name | +-----------+------+----------+-----------+ | |

我在python和dataframe方面遇到了一个小问题。 我如何循环浏览该列,并使用“类型”数据将儿童(橙色、香蕉和Avocades)与父母的“水果”联系起来,将儿童(汉堡、薯条)与父母的“快餐”联系起来

+-----------+------+----------+-----------+
| Parent_ID | ID   | Type     | Name      |
+-----------+------+----------+-----------+
|           | 226  | Category | Fruit     |
|           | 2090 | Item     | Orange    |
|           | 2091 | Item     | Banana    |
|           | 2092 | Item     | Avocados  |
|           | 209  | Category | Fast-Food |
|           | 2097 | Item     | Burger    |
|           | 2099 | Item     | fries     |
+-----------+------+----------+-----------+
我希望我的数据帧如下所示

+-----------+------+----------+-----------+
| Parent_ID |  ID  |   Type   |   Name    |
+-----------+------+----------+-----------+
|           |  226 | Category | Fruit     |
|       226 | 2090 | Item     | Orange    |
|       226 | 2091 | Item     | Banana    |
|       226 | 2092 | Item     | Avocados  |
|           |  209 | Category | Fast-Food |
|       209 | 2097 | Item     | Burger    |
|       209 | 2099 | Item     | fries     |
+-----------+------+----------+-----------+

您可以先检查
类型
列等于
类别
的位置,然后取布尔级数的
总和
。然后将结果用于
ID
,并将第一个作为每组的
Parent\u ID

g = df.Type.eq('Category').cumsum()
df = df.assign(Parent_ID=df.groupby(g).ID.transform('first'))
df['Parent_ID'] = df.Parent_ID.where(df.ID.ne(df.Parent_ID)).fillna('')

    ID      Type       Name    Parent_ID
0   226  Category      Fruit          
1  2090      Item     Orange       226
2  2091      Item     Banana       226
3  2092      Item   Avocados       226
4   209  Category  Fast-Food          
5  2097      Item     Burger       209
6  2099      Item      fries       209

Type==“Item”

new_parent = df.query('Type=="Category"').reindex(df.index).ID.ffill().astype(int)

df.loc[df.Type.eq('Item'), 'Parent_ID'] = new_parent[df.Type.eq('Item')]

df
# returns:
  Parent_ID    ID      Type       Name
0             226  Category      Fruit
1       226  2090      Item     Orange
2       226  2091      Item     Banana
3       226  2092      Item   Avocados
4             209  Category  Fast-Food
5       209  2097      Item     Burger
6       209  2099      Item      fries