首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多列的条件命名

多列的条件命名
EN

Stack Overflow用户
提问于 2019-04-30 08:41:14
回答 2查看 36关注 0票数 1

我有一个数据集;

代码语言:javascript
复制
>>> all_transcripts

ID  Type    Name
1   Guest   Hugo
1   Guest   Hugo   
1   Boss    Boss
1   Boss    Boss
2   Boss    Boss
2   Guest   Calvin
2   Guest   Calvin             
3   Guest   Klein
3   Boss    Boss

现在,我希望创建一个名为nameGuest的列,该列包含每行每个ID的来宾名称。因此,我想要的输出如下:

代码语言:javascript
复制
>>> all_transcripts

ID  Type    Name     nameGuest
1   Guest   Hugo     Hugo
1   Guest   Hugo     Hugo   
1   Boss    Boss     Hugo
1   Boss    Boss     Hugo
2   Boss    Boss     Calvin
2   Guest   Calvin   Calvin
2   Guest   Calvin   Calvin    
3   Guest   Klein    Klein
3   Boss    Boss     Klein

我该怎么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-30 08:45:04

使用Series.map by helper Series (由boolean indexingDataFrame.drop_duplicatesDataFrame.set_index创建)获取每个组Guest的第一个值:

代码语言:javascript
复制
s = df[df['Type'] == 'Guest'].drop_duplicates('ID').set_index('ID')['Name']
df['nameGuest'] = df['ID'].map(s)
print (df)
   ID   Type    Name nameGuest
0   1  Guest    Hugo      Hugo
1   1  Guest    Hugo      Hugo
2   1   Boss    Boss      Hugo
3   1   Boss    Boss      Hugo
4   2   Boss    Boss    Calvin
5   2  Guest  Calvin    Calvin
6   2  Guest  Calvin    Calvin
7   3  Guest   Klein     Klein
8   3   Boss    Boss     Klein
票数 2
EN

Stack Overflow用户

发布于 2019-04-30 08:53:40

Groupby.first

您可以在Type=Guest上使用Type=Guest筛选器之前使用first,并在聚合时选择first名称。

这将得到具有相应ID的名称。因此,我们可以将其映射回我们的dataframe并创建新列:

代码语言:javascript
复制
names = df[df['Type'] == 'Guest'].groupby('ID')['Name'].first()

df['nameGuest'] = df['ID'].map(names)
代码语言:javascript
复制
print(df)
   ID   Type    Name nameGuest
0   1  Guest    Hugo      Hugo
1   1  Guest    Hugo      Hugo
2   1   Boss    Boss      Hugo
3   1   Boss    Boss      Hugo
4   2   Boss    Boss    Calvin
5   2  Guest  Calvin    Calvin
6   2  Guest  Calvin    Calvin
7   3  Guest   Klein     Klein
8   3   Boss    Boss     Klein

names输出

代码语言:javascript
复制
print(names)
ID
1      Hugo
2    Calvin
3     Klein
Name: Name, dtype: object
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55917020

复制
相关文章

相似问题

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