基于2系列和Lis的Pandas列生成

2024-04-26 21:46:24 发布

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

我试图在pandas中生成一个新列,它依赖于数据帧中其他两个系列的值。我想知道最有效的方法是什么

我有一个包含3列的数据框:Tasks、Primary User、Secondary User

df = pd.DataFrame({'Task':list('ABC'),
                   'Primary User':['Alan','Ben','Christine'],
                   'Secondary User':['Dan','Eve','Fran']})

print (df)

  Task Primary User Secondary User
0    A         Alan            Dan
1    B          Ben            Eve
2    C    Christine           Fran

我想在数据中生成一个名为“Username”的附加序列

用户名应来自以下列表:

userNames = [('Alan','alan123'), ('Ben', None), ('Christine', None), ('Dan', 'dan789'), ('Eve', 'Eve234'), ('Christine', None)]

username列只有一个用户名,并且将采用主要用户的用户名,除非主要用户的username = None,否则它将提取次要用户的用户名。如果两个users =None,则填充“Error”

输出应为:

enter image description here

我一直在努力创建这个if站


Tags: 数据用户nonedftaskeve用户名ben
1条回答
网友
1楼 · 发布于 2024-04-26 21:46:24

首先用元组列表创建字典,第一列为^{},第二列与^{}相似,如果值与Primary User不匹配,则替换nan:

d = {k:v for k, v in userNames}
print (d)
{'Alan': 'alan123', 'Ben': None, 'Christine': None, 
  'Dan': 'dan789', 'Eve': 'Eve234', 'Fran': None}

df['Usename'] = df['Primary User'].map(d).fillna(df['Secondary User'].map(d)).fillna('Error')
print (df)
  Task Primary User Secondary User  Usename
0    A         Alan            Dan  alan123
1    B          Ben            Eve   Eve234
2    C    Christine           Fran    Error

细节

print (df['Primary User'].map(d))
0    alan123
1       None
2       None
Name: Primary User, dtype: object

相关问题 更多 >