根据2系列和清单生成熊猫专栏

时间:2019-06-06 11:18:02

标签: python pandas

我正在尝试在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,则填充“错误”。

输出应为:

enter image description here

我一直在努力创建if站。

1 个答案:

答案 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