满足条件时添加新行

问题描述 投票:0回答:1

考虑这个 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卡卡 龙之母
小学 布蕾妮·塔斯
pandas dataframe
1个回答
0
投票

您可以

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
© www.soinside.com 2019 - 2024. All rights reserved.