Un moyen efficace de multiplier deux dataframes en fonction d'une condition sur une certaine colonne

user_5

Je voudrais multiplier deux dataframes df1 et df2, en fonction d'une condition et de manière efficace.

df1:

df1 = pd.DataFrame(columns=['user_id', 'gender', 'value_1', 'value_2', 'value_3'], data = [[112,0,50,60,70], [73,10,20,40,55],[61, 0, 15, 30, 45]])

    user_id   gender   value_1   value_2   value_3
0   112       0         50         60        70
1   73        10        20         40        55
2   61        0         15         30        45

df2:

df2 = pd.DataFrame(columns=['gender', 'value_1', 'value_2', 'value_3'], data = [[2, 3, 5, 0], [4, 6, 7, 10]])

          value_1    value_2    value_3    gender
0         2          3          5          0
1         4          6          7          10

Je voudrais multiplier les colonnes value_1, value_2, value_3 de df1 par df2 où la colonne gender correspond dans les deux dataframes. J'ai fait cela de la manière suivante et cela fonctionne bien:

val_cols = ['value_1', 'value_2', 'value_3']
df1.loc[df1.gender==0, val_cols] *= df2[df2.gender==0][val_cols].values[0].tolist()
df1.loc[df1.gender==10, val_cols] *= df2[df2.gender==10][val_cols].values[0].tolist()

Mais cela n'est applicable que si la colonne de genre n'a que quelques valeurs, dans ce cas, elle ne peut être que de 0 et 10. Mais que se passerait-il s'il y avait des valeurs plus distinctes pour le genre? Y a-t-il une meilleure façon de le faire au cas où les valeurs de genre et, par conséquent, le nombre d'enregistrements dans le df2 sont plus élevés? PS: Mes vraies dataframes sont très grandes, donc je ne peux pas utiliser les fonctions apply ou map.

Andrej Kesely

Vous pouvez .set_index()à genderdes deux dataframes puis faire df.mul():

df1 = pd.DataFrame(columns=['user_id', 'gender', 'value_1', 'value_2', 'value_3'], data = [[112,0,50,60,70], [73,10,20,40,55],[61, 0, 15, 30, 45]])
df2 = pd.DataFrame(columns=['value_1', 'value_2', 'value_3', 'gender'], data = [[2, 3, 5, 0], [4, 6, 7, 10]])

df1 = df1.set_index(['gender', 'user_id'])
df2 = df2.set_index('gender')

out = df1.mul(df2, level=0)
print(out)

Impressions:

                value_1  value_2  value_3
gender user_id                           
0      112          100      180      350
10     73            80      240      385
0      61            30       90      225

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Créer un tableau de fréquences à partir de deux colonnes en fonction d'une certaine condition

Ajouter une colonne d'un df à un autre en fonction de la colonne de date sur les deux dfs - Pandas

Le moyen le plus efficace d'appliquer une fonction à la colonne du bloc de données

moyen efficace d'ajouter une colonne à un tableau dans Fortran?

Le meilleur moyen de trier un tableau numpy basé sur une colonne puis de le sous-trier en fonction d'une autre?

Moyen efficace de mettre à jour une ligne spécifique dans dataframe1 en fonction d'une condition spécifique correspondant à celle de dataframe2

Fusionner deux colonnes dans Sélectionner dans une colonne en fonction d'une condition

Comment trouver la valeur minimale dans une colonne en fonction de la condition dans une autre colonne d'un dataframe?

Existe-t-il un moyen de sélectionner la somme sur une colonne en fonction d'une autre colonne DISTINCT, tout en regroupant par troisième colonne (date) uniquement

Moyen efficace de parcourir une colonne

Comparez deux colonnes dans deux dataframes avec une condition sur une autre colonne

moyen efficace de créer une colonne qui indique une combinaison unique de valeurs à partir d'un ensemble de colonnes

Awk - Imprimer conditionnellement un élément d'une certaine ligne, en fonction de la condition d'un élément différent dans une ligne différente

Moyen efficace de décaler les valeurs d'une matrice en fonction des valeurs d'une autre matrice

Compter le nombre de lignes en fonction d'un modèle sur une colonne

Comparaison de deux colonnes de deux dataframes en fonction d'une correspondance de chaîne partielle

Rejoindre en fonction d'une condition d'une autre colonne

Un moyen rapide de regrouper les valeurs de colonne dans une certaine plage et d'attribuer une valeur à une nouvelle colonne

NumPy: moyen efficace de multiplier chaque paire de matrices 3D en deux matrices 4D?

Muter une colonne en fonction d'une condition et d'un vecteur

Joindre deux DataFrames sur une colonne de chaîne mais en ignorant les accents / signes diacritiques

Comment déposer / supprimer des dataframes d'un dictionnaire en fonction du nombre de valeurs uniques dans une colonne?

R | Modification d'un élément dans une colonne en fonction d'une condition dans une autre colonne

Activer un modèle en fonction de l'existence ou non d'une certaine fonction

Filtrer les lignes en fonction d'une colonne dans une liste de dataframes

Changer la valeur de la colonne en NA en fonction d'une autre condition de colonne

Comment puis-je modifier les données de la colonne pandas en fonction d'une condition spécifique basée sur une entrée de colonne?

Existe-t-il un moyen dans SQL d'agréger une colonne sur des lignes et potentiellement de dupliquer des lignes en fonction d'une autre valeur de champ dans Redshift?

Existe-t-il un moyen efficace de faire une déclaration de sélection avec deux variables?

TOP Lista

  1. 1

    ¿Cómo ocultar la aplicación web de los robots de búsqueda? (ASP.NET)

  2. 2

    Pandas의 CSV 파일을 Pandas 데이터 프레임으로 가져 오기

  3. 3

    uitableview delete button image in iOS

  4. 4

    Manera correcta de agregar referencias al proyecto C # de modo que sean compatibles con el control de versiones

  5. 5

    Swift / Firebase : Facebook 사용자가 계정을 만들 때 Firebase 데이터베이스에 제대로 저장하려면 어떻게해야합니까?

  6. 6

    caída condicional de filas desde un marco de datos de pandas

  7. 7

    Link library in Visual Studio, why two different ways?

  8. 8

    Pagination class not getting applied in html

  9. 9

    Que signifie Decimal (-1)?

  10. 10

    UIButton textLabel with different fonts

  11. 11

    WPF pleine largeur DataGridColumn sur la largeur de DataGrid

  12. 12

    Opción de máquina virtual no reconocida 'MaxPermSize = 512m' cuando se ejecuta Zeppelin

  13. 13

    matplotlib로 그래프를 그리는 동안 커서 위치에서 날짜 / 시간을 볼 수 없습니다. "DateFormatter에서 x = 0 값을 찾았습니다"라는 오류가 발생합니다.

  14. 14

    ¿Es posible en Windows evitar que otras aplicaciones se enganchen en las DLL del sistema?

  15. 15

    Error de la base de datos de Android Firebase: Permiso denegado al depurar en un teléfono

  16. 16

    Pandas: suma filas de DataFrame para columnas dadas

  17. 17

    ggplot2: gráfico con líneas y puntos para problemas de leyenda de dos conjuntos de datos

  18. 18

    ¿Cómo especificar el puerto en el que se aloja una aplicación ASP.NET Core?

  19. 19

    Recherche de la position d'index d'une valeur dans r dataframe

  20. 20

    GPU를 사용하여 ffmpeg 필터의 처리 속도를 가속화하는 방법은 무엇입니까?

  21. 21

    nested observables executed one after the other after termination

CalienteEtiquetas

Archivo