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