J'ai un df1 comme ci-dessous et je veux vérifier si toutes les valeurs de certaines colonnes de df2 sont entre la valeur max et min de df1. Si c'est le cas, je veux donner la valeur de la colonne de nom de cet index. Si la valeur df2 n'est pas entre l'une de ces valeurs, je veux voir si elle est plus grande ou plus petite que l'une des valeurs max ou min de df1.
list = []
for i in df2['AVERAGE_AGE']:
for index, row in df1.iterrows():
if row['MAX'] >= i and row['MIN'] < i:
list.append(row['Name'])
if i > df1['MAX'].max():
list.append("Postmn")
elif i < df1['MIN'].min():
list.append("Premn")
df2['MNname'] = list
J'ai essayé ceci:
XXX
cela prend beaucoup de temps et la longueur de la liste ne correspond pas à la longueur de df2
3 Réponses :
Vous pouvez essayer ceci
(df2['AVERAGE_AGE'] < df1['MIN'].min()).value_counts() (df2['AVERAGE_AGE'] > df1['MAX'].max()).value_counts()
Cela vous indiquera le nombre de lignes qui remplissent les conditions en donnant le nombre de Vrai et Faux.
Vous pouvez boucler sur la première trame de données et définir des noms pour la seconde en utilisant pandas.DataFrame.loc :
>>> df2 = pd.DataFrame([ ... 2.299367, 20.688943, 10.245027, 1.412258, 22.541987, ... 2.588420, 5.578598, 11.703629, 12.529066, 17.769196, ... ], columns=['AVERAGE_AGE']) >>> for index, row in df1.iterrows(): ... df2.loc[(df2.AVERAGE_AGE>=row.MIN) & (df2.AVERAGE_AGE<row.MAX),'Name'] = row.Name ... >>> df2 AVERAGE_AGE Name 0 2.299367 MN17 1 20.688943 MN2 2 10.245027 MN9 3 1.412258 MQ18 4 22.541987 MN1 5 2.588420 MN16 6 5.578598 MN13 7 11.703629 MN7-8 8 12.529066 MN7-8 9 17.769196 MN3
Essayez ceci:
arr = []
for i in range(df2.shape[0]):
# Check if the value in COLUMN_1 is between MIN and MAX value
if ((df2['COLUMN_1'][i] > df1['MIN'][i]) and df2['COLUMN_1'][i] < df1['MAX'][i]):
arr.append(df1['Name'][i])
# Check if value in COLUMN_1 is less than Minimum value
elif (df2['COLUMN_1'][i] < df1['MIN'][i]):
arr.append(np.round(df2['COLUMN_1'][i] - df1['MIN'][i], 2))
# Check if value in COLUMN_1 is less than Minimum value
elif (df2['COLUMN_1'][i] > df1['MAX'][i]):
arr.append(np.round(df2['COLUMN_1'][i] - df1['MAX'][i], 2))
df2['Name'] = pd.Series(arr)
Comme vous n'avez pas mentionné exactement le nom de la colonne à vérifier dans df2, je l'ai utilisé comme COLUMN_1. Les conditions et valeurs utilisées sont:
J'espère que cela fonctionne!