首页 > 解决方案 > Python 将多列合二为一

问题描述

我有一个熊猫数据框,如下所示:

data = {'A'      :[1,2,3], 
        'B':[2,17,17], 
        'C1'     :["C1",np.nan,np.nan],
       'C2'     :[np.nan,"C2",np.nan]} 

# Create DataFrame 
df = pd.DataFrame(data) 
df


    A   B   C1  C2
0   1   2   C1  NaN
1   2   17  NaN C2
2   3   17  NaN NaN

我想根据“C1”和“C2”创建一个变量“C”(可能有“C4”、“C5”。如果任何 C 的值“C”= C 中的值(C1、C2、C3 ....). 在这种情况下,我的输出应如下所示:

    A   B   C1  C2   C
0   1   2   C1  NaN  C1
1   2   17  NaN C2   C2
2   3   17  NaN NaN  NaN

标签: python-3.xpandas

解决方案


尝试这个

df1 = df.filter(regex='^C\d+')
df['C'] = df1[df1.isin(df1.columns)].bfill(1).iloc[:,0]

Out[117]:
   A   B   C1   C2    C
0  1   2   C1  NaN   C1
1  2  17  NaN   C2   C2
2  3  17  NaN  NaN  NaN

如果要严格比较与自己的列名匹配的值,请使用eq而不是isin如下

df['C'] = df1[df1.eq(df1.columns, axis=1)].bfill(1).iloc[:,0]

推荐阅读