How to merge/combine columns in pandas?

后端 未结 4 2002
日久生厌
日久生厌 2020-12-09 18:35

I have a (example-) dataframe with 4 columns:

data = {\'A\': [\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'],
    \'B\': [42, 52, np.nan, np.nan, np.nan, np.nan],         


        
4条回答
  •  旧巷少年郎
    2020-12-09 19:03

    Use difference for columns names without A and then get sum or max:

    cols = df.columns.difference(['A'])
    df['E'] = df[cols].sum(axis=1).astype(int)
    # df['E'] = df[cols].max(axis=1).astype(int)
    df = df.drop(cols, axis=1)
    print (df)
       A   E
    0  a  42
    1  b  52
    2  c  31
    3  d   2
    4  e  62
    5  f  70
    

    If multiple values per rows:

    data = {'A': ['a', 'b', 'c', 'd', 'e', 'f'],
        'B': [42, 52, np.nan, np.nan, np.nan, np.nan],  
        'C': [np.nan, np.nan, 31, 2, np.nan, np.nan],
        'D': [10, np.nan, np.nan, np.nan, 62, 70]}
    df = pd.DataFrame(data, columns = ['A', 'B', 'C', 'D'])
    
    print (df)
       A     B     C     D
    0  a  42.0   NaN  10.0
    1  b  52.0   NaN   NaN
    2  c   NaN  31.0   NaN
    3  d   NaN   2.0   NaN
    4  e   NaN   NaN  62.0
    5  f   NaN   NaN  70.0
    
    cols = df.columns.difference(['A'])
    df['E'] = df[cols].apply(lambda x: ', '.join(x.dropna().astype(int).astype(str)), 1)
    df = df.drop(cols, axis=1)
    print (df)
       A       E
    0  a  42, 10
    1  b      52
    2  c      31
    3  d       2
    4  e      62
    5  f      70
    

提交回复
热议问题