После исправления nan
s:
df = df.replace('Nan', np.nan)
собрать все ненулевые значения в каждой строке списка и объединить элементы списка.
df['column-d'] = df.apply(lambda x: ','.join(x[x.notnull()]), axis=1)
#0 A,B
#1 A,C
#2 C
#3 A,B,C
Удивительно, но это решение несколько быстрее, чем решение stack/groupby
от Wen, по крайней мере, для опубликованного набора данных.