考虑这个 df:
data = { 'Name Type': ["Primary", "Primary", "Primary"],
'Full Name': ["John Snow", "Daenerys Targaryen", "Brienne Tarth"],
'AKA': ["Aegon Targaryen", None, None],
'LQAKA': ["The Bastard of Winterfell", "Mother of Dragons", None]}
df = pd.DataFrame(data)
如果每个主名称下方的 akas 和 lqakas 不是 None,我需要移动 akas 和 lqakas,并将名称类型指定为 AKA 或 LQAKA。如果为 None,则不应创建任何行。所以预期的结果是:
名称类型 | 全名 |
---|---|
小学 | 约翰·斯诺 |
又名 | 伊耿·坦格利安 |
L卡卡 | 临冬城的私生子 |
小学 | 丹妮莉丝·坦格利安 |
L卡卡 | 龙之母 |
小学 | 布蕾妮·塔斯 |
stack
并用 where
:
out = (df
.set_index('Name Type').stack()
.reset_index(name='Full Name')
.assign(**{'Name Type': lambda d: d['Name Type']
.where(d['level_1'].eq('Full Name'), d.pop('level_1'))})
)
输出:
Name Type Full Name
0 Primary John Snow
1 AKA Aegon Targaryen
2 LQAKA The Bastard of Winterfell
3 Primary Daenerys Targaryen
4 LQAKA Mother of Dragons
5 Primary Brienne Tarth