Manera elegante de producir descripciones de columnas basadas en datos de columnas.

Tengo un dataframe de pandas:

index data1 data2 1 30 20 2 20 10 3 40 90 

Quiero producir una serie de descripciones, una para cada fila, que indique si una parte de los datos fue significativa.

Defino significativo como tener un valor superior a 25, así que quiero la siguiente matriz:

 ['data1 was significant', '', 'data1 was significant\ndata2was significant'] 

Sé que puedo ir a través de cada fila y revisar cada columna y construir una matriz, pero me pregunto si hay una manera elegante de hacerlo usando pandas.

Usa el truco de dot :

 df = pd.DataFrame({ 'data1': [30, 20, 40], 'data2': [20, 10, 90] }, index=[1,2,3]) df.gt(25).dot(df.columns + ' was significant\n').str.strip().tolist() # ['data1 was significant', '', 'data1 was significant\ndata2 was significant'] 

O bien, utilizando apply

 In [323]: (df.gt(25).apply(lambda x: '\n'.join( ['%s was significant' % c for c, v in x.iteritems() if v]), axis=1) .tolist()) Out[323]: ['data1 was significant', '', 'data1 was significant\ndata2 was significant'] 

O, utilice np.where .

 [''.join(x) for x in np.where(df > 25, df.columns + ' was significant\n', '')] ['data1 was significant\n', '', 'data1 was significant\ndata2 was significant\n']