我正在尝试在pandas中生成一个新列,该列取决于数据框中其他两个Series的值。想知道这样做最有效的方法是什么。
我有一个包含3列的数据框:任务,主要用户,次要用户。
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
我想在名为“用户名”的数据中生成其他系列。
用户名应来自以下列表:
userNames = [('Alan','alan123'), ('Ben', None), ('Christine', None), ('Dan', 'dan789'), ('Eve', 'Eve234'), ('Christine', None)]
用户名列只有一个用户名,并且将采用主要用户的用户名,除非主要用户的username = None
会拉取次要用户的用户名。如果两者均为users =None
,则填充“错误”。
输出应为:
我一直在努力创建if站。
答案 0 :(得分:0)
首先创建带有元组列表的字典,第一列为Series.map
,第二列类似为Series.fillna
,如果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