2017-08-21 2 views
1

Je me demande s'il existe une méthode que je peux utiliser pour obtenir la valeur minimale dans chaque colonne avec son identifiant d'index sans utiliser la méthode d'agrégation (df.agg (['min' , 'idmin']). T) pour ce code? !!Trouver la valeur minimale dans chaque colonne avec leur index

dates = pd.date_range('20130101', periods=6) 
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD')) 
+0

Quelle est votre résultat attendu? S'il vous plaît fournir un exemple. –

+0

Je fournis déjà tout le code pour obtenir la sortie! –

+0

'(df.agg (['min', 'idmin']). T)' ne fonctionne pas? –

Répondre

3

Construire une trame de données à partir de zéro:

pd.DataFrame({'min': df.min(), 'idxmin': df.idxmin()}) 

     min  idxmin 
A -1.106929 2013-01-03 
B -0.642583 2013-01-06 
C -1.350638 2013-01-04 
D -0.213750 2013-01-06 

ou concat les deux séries:

pd.concat((df.min(), df.idxmin()), axis=1).rename(columns={0: 'min', 1: 'idxmin'}) 
Out: 
     min  idxmin 
A -1.106929 2013-01-03 
B -0.642583 2013-01-06 
C -1.350638 2013-01-04 
D -0.213750 2013-01-06 
1
dates = pd.date_range('20130101', periods=6) 
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD')) 

def minVal(x): 
    return pd.Series(index=['min','idx'],data=[x.min(),x.idxmin()]) 

x = df.apply(minVal) 

print(x) 

      A     B      C     D 
min -0.743023394642  -1.05144770539  -2.1311363065  -1.02142276427 
idx 2013-01-05 00:00:00 2013-01-04 00:00:00 2013-01-03 00:00:00 2013-01-06 00:00:00 

Vous pouvez également faire une Transposer de x pour obtenir l'essentiel des données.

print(x.T) 

     min   idx 
A -0.657701 2013-01-05 00:00:00 
B -1.37038 2013-01-03 00:00:00 
C -1.93103 2013-01-03 00:00:00 
D -1.49314 2013-01-05 00:00:00