熊猫检查两列是否相同

时间:2019-10-16 09:03:51

标签: python pandas

df = {'A':[3, 4, 5, np.nan, 6, 7],
        'B':[np.nan, 4, np.nan, np.nan, 6, 7]}

我有一个包含两列A和B的数据框。我想创建一个新列C,这是检查A和B是否相同,是否保留然后是否保留一个的结果。是NaN,则保留其他值。列A和B始终是值或NaN。 A和B中的值始终相同。

我知道如何检查A和B是否相同:

df['C'] = (df['A'] == df['B]).astype('object')

但是,这在C列中给出了布尔值的答案,无论是正确还是错误。我的预期输出将是:

A   B   C
3  NaN  3
4   4   4
5  NaN  5
NaN NaN NaN
6   6   6
7   7   7

4 个答案:

答案 0 :(得分:3)

您可以使用np.where()

>>> df = pd.DataFrame({'A':[3, 4, 5, np.nan],'B':[np.nan,4,np.nan,np.nan]})
>>> df
     A    B
0  3.0  NaN
1  4.0  4.0
2  5.0  NaN
3  NaN  NaN

>>> df['C'] = np.where(df['A'].isna(), df['B'], df['A'])
>>> df
     A    B    C
0  3.0  NaN  3.0
1  4.0  4.0  4.0
2  5.0  NaN  5.0
3  NaN  NaN  NaN

编辑的样本

表明如果df['A']为nan并且df['B']有值,它将起作用。

>>> df = pd.DataFrame({'A':[3, np.nan, 5, np.nan],'B':[np.nan,4,np.nan,np.nan]})
>>> df
     A    B
0  3.0  NaN
1  NaN  4.0
2  5.0  NaN
3  NaN  NaN

>>> df['C'] = np.where(df['A'].isna(), df['B'], df['A'])
>>> df
     A    B    C
0  3.0  NaN  3.0
1  NaN  4.0  4.0
2  5.0  NaN  5.0
3  NaN  NaN  NaN

谢谢:D

答案 1 :(得分:3)

使用np.select可以检查多个条件。

df = pd.DataFrame({'A':[3, 4, 5, np.nan, 6, np.nan],
    'B':[np.nan, 4, np.nan, np.nan, 6, 7]})

df['c'] = np.select([df['A'].isnull() & df['B'].isnull(), df['A'].isnull()], 
                     [np.nan, df['B']], df['A'])

输出:

    A    B       c
0   3.0  NaN     3.0
1   4.0  4.0     4.0
2   5.0  NaN     5.0
3   NaN  NaN     NaN
4   6.0  6.0     6.0
5   NaN  7.0     7.0

答案 2 :(得分:2)

如果可以保证A和B在不是nans时是相同的值,那么您可以在此处使用.combine_first

df['C'] = df.A.combine_first(df.B)

答案 3 :(得分:1)

我认为fillna足以满足您的要求

df['C'] = df.A.fillna(df.B)

Out[92]:
     A    B    C
0  3.0  NaN  3.0
1  4.0  4.0  4.0
2  5.0  NaN  5.0
3  NaN  NaN  NaN
4  6.0  6.0  6.0
5  7.0  7.0  7.0