2 votes

Récupérer les données minimales d'une colonne du Dataframe Panda et ajouter le nom de la colonne

J'ai les pandas suivants Serie.

    XAMS    [6.2965, 6.297, 6.298]
    XPAR    [6.2963, 6.297, 6.298]
    Name: 1, dtype: object

Ce que je veux obtenir est le Dataframe suivant ou quelque chose qui peut effectuer ce résultat.

         XPAR     XPAR/XAMS     XPAR/XAMS
XAMS    [6.2963,      6.297,     6.298]

L'idée est d'obtenir la valeur minimale et aussi d'obtenir quelles sont les séries qui font référence à cette valeur.

Avec la fonction min, j'obtiens le résultat précédent mais je ne sais pas à quelle colonne il se réfère.

Mon code :

for index, row in data.iterrows():
    data_aux = row.dropna()
    if (side == Quote.FIELD_PX_BID):
        best = data_aux.min()
    else:
        best = data.max()

Où data_aux est la première trame de données pandas que je veux vérifier.

3voto

jezrael Points 290608

Si vous avez besoin des premières valeurs minimales, des secondes et des listes similaires, utilisez-les :

df = pd.DataFrame(df['FIELD_PX_BID'].values.tolist()).min().to_frame().T
print (df)
        0      1      2
0  6.2963  6.297  6.298

Détails :

print (pd.DataFrame(df['FIELD_PX_BID'].values.tolist()))
        0      1      2
0  6.2965  6.297  6.298
1  6.2963  6.297  6.298

S'il y a une longueur maximale de la liste 3 est possible de spécifier les noms des colonnes :

df = (pd.DataFrame(df['FIELD_PX_BID'].values.tolist(), 
                   columns=['XPAR','XPAR/XAMS','XPAR/XAMS']).min().to_frame().T)
print (df)
     XPAR  XPAR/XAMS  XPAR/XAMS
0  6.2963      6.297      6.298

1voto

Alexandre B. Points 4770

Vous pouvez essayer :

df[0].apply(pd.Series).apply(min, axis=1)

Explications :

  1. transformer le list aux colonnes du cadre de données
  2. Appliquer le min sur les colonnes

    Your dataframe

    df = pd.DataFrame({0:[[6.2965, 6.297, 6.298], [6.2963, 6.297, 6.298], [6.2963, 6.297, 6.298, 6.298], [6.2963, 6.297 ]]}, index=['XAMS', 'XPAR', 'XPAR2', 'XPAR3']) print(df)

    0

    XAMS [6.2965, 6.297, 6.298]

    XPAR [6.2963, 6.297, 6.298]

    XPAR2 [6.2963, 6.297, 6.298, 6.298]

    XPAR3 [6.2963, 6.297]

    Transform the list to new columns

    df = df[0].apply(pd.Series) print(df)

    0 1 2 3

    XAMS 6.2965 6.297 6.298 NaN

    XPAR 6.2963 6.297 6.298 NaN

    XPAR2 6.2963 6.297 6.298 6.298

    XPAR3 6.2963 6.297 NaN NaN

    Apply the min operator each cloumns

    df_min = df.apply(min, axis=1) print(df_min)

    XAMS 6.2965

    XPAR 6.2963

    XPAR2 6.2963

    XPAR3 6.2963

1voto

Valentino Points 6643

Supposons que sr est votre Series Je crée ici une série avec différentes longueurs pour montrer que cela fonctionne aussi dans ce cas :

sr = pd.Series([[6.2965, 6.297], [6.2963, 6.297, 6.298]], index=['XAMS', 'XPAR'])

Vous pouvez le faire :

res_sr = pd.DataFrame(ss.to_list(), columns=['XPAR','XPAR/XAMS','XPAR/XAMS']).min()

res_sr est un Series :

XPAR         6.2963
XPAR/XAMS    6.2970
XPAR/XAMS    6.2980
dtype: float64

Si vous devez le mettre en forme sous la forme d'un cadre de données avec une ligne (comme dans votre question), faites-le :

res_sr.to_frame().transpose()

1voto

powerPixie Points 708

J'ai peut-être une solution.

d       = []
frame   = []

d = list(map(list,zip(XAMS, XPAR)))

Ce morceau de code place vos valeurs de cette façon :

[[6.2965, 6.2963], [6.297, 6.297], [6.298, 6.298]]

Ensuite, vous pouvez obtenir les minimums que vous vouliez :

for pairs in d:

minimal = (min(pairs))
frame.append(minimal)

Utilisez le résultat du cadre pour construire votre cadre de données.

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X