使用选择规则将两列字符串数据合并为一列

2024-05-05 08:59:33 发布

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

我必须将两列字符串数据组合成一列(在同一个数据帧中),我还需要某种选择规则,我给你一个例子

  import numpy as np
    import pandas as pd
    df = pd.DataFrame({'nameA':['martin', 'peter', 'john', 'tom', 'bill'], 
                       'nameB':[ np.NaN,np.NaN , 'jhon', 'tomX', 'billX']})
    df

    nameA   nameB
0   martin  NaN
1   peter   NaN
2   john    jhon
3   tom     tomX
4   bill    billX

此输出是预期的行为

    nameA   nameB   nameAB
0   martin  NaN     martin
1   peter   NaN     peter
2   john    jhon    jhon
3   tom     tomX    tomX
4   bill    billX   bilX

规则应该是这样的:

  1. 如果A和B不同,则写B
  2. 如果B是NaN,就写A
  3. 如果A和B为NaN,则写NaN

我发现了一些关于数字的技巧,但没有关于字符串的技巧,我想我必须逐行测试,得到一个真的或假的值,然后写入适当的值

任何指导或帮助都将不胜感激


3条回答

^{}

df['nameAB'] = df['nameB'].fillna(df['nameA'])
print(df)

输出

    nameA  nameB  nameAB
0  martin    NaN  martin
1   peter    NaN   peter
2    john   jhon    jhon
3     tom   tomX    tomX
4    bill  billX   billX

使用np.where

import pandas as pd
import numpy as np

df = pd.DataFrame({'nameA': ['martin', 'peter', 'john', 'tom', 'bill'],
                   'nameB': [np.NaN, np.NaN, 'jhon', 'tomX', 'billX']})


df['nameAB'] = np.where(pd.isna(df['nameB']), df['nameA'], df['nameB'])

print(df)

输出

    nameA  nameB  nameAB
0  martin    NaN  martin
1   peter    NaN   peter
2    john   jhon    jhon
3     tom   tomX    tomX
4    bill  billX   billX

给定条件,当nameBnan时,只返回nameA

您可以使用^{}

In [1972]: df['nameAB'] = df.nameB.combine_first(df.nameA)

In [1973]: df
Out[1973]: 
    nameA  nameB  nameAB
0  martin    NaN  martin
1   peter    NaN   peter
2    john   jhon    jhon
3     tom   tomX    tomX
4    bill  billX   billX

相关问题 更多 >