如何比较数据框中的两列,并根据这两列的差异有效地创建新列?
我的表中有一个功能,其中有很多缺失的值,我需要使用数据库中包含该功能的其他表来回填这些信息。我已经使用np.select
将原始表中的功能与其他表中的相同功能进行了比较,但是我觉得应该有一个简单的方法。
例如:pd.DataFrame({'A': [1,2,3,4,np.nan], 'B':[1,np.nan,30,4,np.nan]})
我希望新列包含值[1,2,"different",4,np.nan]
。任何帮助将不胜感激!
答案 0 :(得分:0)
pandas.Series.combine_first或pandas.DataFrame.combine_first在这里可能有用。它们的操作类似于SQL COALESCE
,并通过选择第一个非空值(如果存在)来组合两列。
df = pd.DataFrame({'A': [1,2,3,4,np.nan], 'B':[1,np.nan,30,4,np.nan]})
C = df.A.combine_first(df.B)
C看起来像:
0 1.0
1 2.0
2 3.0
3 4.0
4 NaN
然后,要满足您的要求,即两个不同的非null值在组合时应提供“不同”,只需找到这些索引并更新值即可。
mask = ~df.A.isna() & ~df.B.isna() & (df.A != df.B)
C[mask] = 'different'
C现在看起来像:
0 1
1 2
2 different
3 4
4 NaN
答案 1 :(得分:0)
另一种方法是将pd.DataFrame.iterrows
与nunique
一起使用:
import pandas as pd
df['C'] = [s['A'] if s.nunique()<=1 else 'different' for _, s in df.iterrows()]
输出:
A B C
0 1.0 1.0 1
1 2.0 NaN 2
2 3.0 30.0 different
3 4.0 4.0 4
4 NaN NaN NaN