首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pandas -基于其他列对列进行分组,并将它们标记到新列中

Pandas -基于其他列对列进行分组,并将它们标记到新列中
EN

Stack Overflow用户
提问于 2019-04-06 10:36:41
回答 1查看 95关注 0票数 0

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

例如:

Parent_ID和子ID链接在一起,并定义分层树中与谁相关的人。

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

代码语言:javascript
运行
复制
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文件。即Alfred.csv、Carmen.csv (将只有自己的条目,ice第4行)、Katya.csv (使用to_csv()函数)。

代码语言:javascript
运行
复制
Alfred
  |_ Galie
   _ Tom
   _ Marvela
       |_ Remo
        _ Armin
Carmen
Katya
  |_ Boris

而且,我想在同一个数据框中创建一个新列,它将有一个指示层次结构的标记。像这样:

代码语言:javascript
运行
复制
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(),但是看起来有点复杂,并且没有得到我想要的结果。每个父文件都应该有一个文件,子记录在父文件中。如果孩子有其他孩子(比如marvel),它就有资格拥有自己的csv文件。

最终的输出将是

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

发布于 2019-04-06 11:52:45

我假设你的数据帧是一个字典:

代码语言:javascript
运行
复制
mydf = ({"No":[1,2,3,4,5,6,7,8,9],"Name":["Tom","Galie","Remo","Carmen","Alfred","Marvela","Armin","Boris","Katya"],
        "ID":[211,209,200,212,111,101,234,454,109],"Parent_Id":[111,111,101,121,191,111,101,109,323]})
df = pd.DataFrame(mydf)

然后,我从每一行确定Parent_Id。最后将它们存储到新的列中:

代码语言:javascript
运行
复制
tag = []
for z in df['Parent_Id']:
    try:
        tag.append(df.query('ID==%s'%z)['Name'].item())
    except:
        tag.append('')
df['Tag'] = tag

根据列Tag中的值过滤数据帧,例如Alfred

代码语言:javascript
运行
复制
df[df['Tag'].str.match('Alfred')]

然后将其保存在csv文件中。对其他值重复上述步骤。或者,如果在Tag列中有大量的名称,则使用for循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55545358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档