使用Pandas Dataframe Python对父/子数据进行分组

2024-06-01 03:49:38 发布

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

我有一个数据帧,我想根据同一数据帧中另一列的值对其进行分组。在

例如:

父/子ID被链接起来,并定义谁与层次树中的谁相关。在

数据帧看起来像(从csv文件输入)

No  Name    ID  Parent_Id
1   Tom     211 111
2   Galie   209 111
3   Remo    200 101
4   Carmen  212 121
5   Alfred  111 191
6   Marvela 101 111
7   Armin   234 101
8   Boris   454 109
9   Katya   109 323

我想根据下面分组中的ID和Parent_ID对这个数据帧进行分组,并基于顶层父对象生成CSV文件。即,阿尔弗雷德.csv, 卡门.csv(只有自己的入口,冰线#4),卡提亚.csv使用to_csv()函数。在

^{pr2}$

我想在同一个数据框中创建一个新列,它将有一个标记来指示层次结构。比如:

No  Name    ID  Parent_Id   Tag
1   Tom     211 111     Alfred
2   Galie   209 111     Alfred
3   Remo    200 101     Marvela, Alfred
4   Carmen  212 121 
5   Alfred  111 191 
6   Marvela 101 111     Alfred
7   Armin   234 101     Marvela, Alfred
8   Boris   454 109     Katya
9   Katya   109 323

请注意,名称可以重复,但是ID是唯一的。在

请告诉我如何使用熊猫来实现这一点。我尝试过groupby(),但似乎有点复杂,没有得到我想要的结果。每个父文件应该有一个文件,父文件中有子记录。 如果一个孩子有另一个孩子(比如mavel),它就有资格拥有自己的csv文件。在

最终的结果是

Alfred.csv - All records matching Galie, Tom, Marvela
Marvela.csv - All records matching Remo, Armin
Carmen.csv - Only record matching carmen (row)
Katya.csv - all records matching katya, boris

Tags: 文件csv数据idparentrecordstomalfred
1条回答
网友
1楼 · 发布于 2024-06-01 03:49:38

我将编写一个递归函数来实现这一点。在

首先,创建{id:name}{parent:id}的字典和递归函数。在

id_name_dict = dict(zip(df.ID, df.Name))
parent_dict = dict(zip(df.ID, df.Parent_Id))

def find_parent(x):
    value = parent_dict.get(x, None)
    if value is None:
        return ""
    else:
        # Incase there is a id without name.
        if id_name_dict.get(value, None) is None:
            return "" + find_parent(value)

        return str(id_name_dict.get(value)) +", "+ find_parent(value)

然后用Series.apply创建新列,用Series.str.strip删除{}

^{pr2}$

相关问题 更多 >