web-dev-qa-db-fra.com

Pandas min () de la ligne et des colonnes sélectionnées

J'essaie de créer une colonne qui ne contient que le minimum d'une ligne et de quelques colonnes, par exemple:

    A0      A1      A2      B0      B1      B2      C0      C1
0   0.84    0.47    0.55    0.46    0.76    0.42    0.24    0.75
1   0.43    0.47    0.93    0.39    0.58    0.83    0.35    0.39
2   0.12    0.17    0.35    0.00    0.19    0.22    0.93    0.73
3   0.95    0.56    0.84    0.74    0.52    0.51    0.28    0.03
4   0.73    0.19    0.88    0.51    0.73    0.69    0.74    0.61
5   0.18    0.46    0.62    0.84    0.68    0.17    0.02    0.53
6   0.38    0.55    0.80    0.87    0.01    0.88    0.56    0.72

Ici, j'essaie de créer une colonne qui contient le minimum pour chaque ligne de colonnes B0, B1, B2.

La sortie ressemblerait à ceci:

    A0      A1      A2      B0      B1      B2      C0      C1      Minimum
0   0.84    0.47    0.55    0.46    0.76    0.42    0.24    0.75    0.42
1   0.43    0.47    0.93    0.39    0.58    0.83    0.35    0.39    0.39
2   0.12    0.17    0.35    0.00    0.19    0.22    0.93    0.73    0.00
3   0.95    0.56    0.84    0.74    0.52    0.51    0.28    0.03    0.51
4   0.73    0.19    0.88    0.51    0.73    0.69    0.74    0.61    0.51
5   0.18    0.46    0.62    0.84    0.68    0.17    0.02    0.53    0.17
6   0.38    0.55    0.80    0.87    0.01    0.88    0.56    0.72    0.01

Voici une partie du code, mais il ne fait pas ce que je veux qu'il fasse:

for i in range(0,2):
    df['Minimum'] = df.loc[0,'B'+str(i)].min()
20
yash.trojan.25

Ceci est une ligne, vous avez juste besoin d'utiliser l'argument axis pour min pour lui dire de travailler sur les colonnes plutôt que vers le bas:

df['Minimum'] = df.loc[:, ['B0', 'B1', 'B2']].min(axis=1)

Si vous devez utiliser cette solution pour différents nombres de colonnes, vous pouvez utiliser une boucle for ou une compréhension de liste pour construire la liste de colonnes:

n_columns = 2
cols_to_use = ['B' + str(i) for i in range(n_columns)]
df['Minimum'] = df.loc[:, cols_to_use].min(axis=1)
28
Marius
df['Minimum'] = df[['B0', 'B1', 'B2']].apply(lambda x: min(x[0],x[1],x[2]), axis=1)
1
DenPO