Trouver le nombre de toutes les paires dans le tableau par colonnes spécifiques


Jack avait

J'ai un dataframe avec des colonnes comme semaine, boutique, marque. Par exemple

week shop brand
1    1    cola
1    2    sprite
1    3    pepsi
1    4    pepsi
2    1    cola 
2    2    sprite
2    3    sprite
2    4    sprite

Je veux savoir combien de magasins rencontrent quelques marques chaque semaine Le tableau des résultats est:

week brand1  brand2  num_shops
1    cola    sprite  1
1    cola    pepsi   2
1    sprite  cola    1
1    sprite  pepsi   1  
1    pepsi   cola    2
1    pepsi   sprite  1    
2    cola    sprite  3
2    sprite  cola    3

Je sais que je devrais probablement faire

def func(x):
    x1 = x.merge(x,on=["week"],suffixes =('1','2'))
    x1.groupby(["brand1","brand2"]).apply(func1)
    return x1

def func1(x):
#make count

data.groupby(["week"]).apply(func)

Puis-je le faire plus rapidement si j'ai beaucoup de données?

Edit: La colonne num_shops s'est formée comme suit: Nous prenons une semaine. Regardez toutes les paires de marques dessus et nous regardons combien de paires répétées. Par exemple, nous obtenons d'abord une table comme celle-ci, puis nous obtenons des informations sur num_shops:

week brand1  brand2 
1    cola    sprite  
1    cola    pepsi
1    cola    pepsi   
1    sprite  cola    
1    sprite  pepsi     
1    pepsi   cola
1    pepsi   cola    
1    pepsi   sprite      
2    cola    sprite  
2    cola    sprite  
2    cola    sprite  
2    sprite  cola
2    sprite  cola
2    sprite  cola    
Jezreel

Utilisez mergeavec DataFrame.querypour filtrer les mêmes valeurs dans les deux brand, puis comptez par DataFrame.groupbyavec GroupBy.size:

df = (df.merge(df,on=["week"], suffixes= ('1','2'))
       .query("brand1 != brand2")
       .groupby(['week','brand1','brand2'], sort=False)
       .size()
       .reset_index(name='num_shops'))
print (df)
   week  brand1  brand2  num_shops
0     1    cola  sprite          1
1     1    cola   pepsi          2
2     1  sprite    cola          1
3     1  sprite   pepsi          2
4     1   pepsi    cola          2
5     1   pepsi  sprite          2
6     2    cola  sprite          3
7     2  sprite    cola          3

ÉDITER:

Votre solution doit être modifiée:

def func(x):
    x1 = x.merge(x,on=["week"],suffixes =('1','2'))
    x1 = x1[x1['brand1'].ne(x1['brand2'])]
    return x1.groupby(["brand1","brand2"], sort=False).size()

df = df.groupby(["week"]).apply(func).reset_index(name='num_shops')
print (df)
   week  brand1  brand2  num_shops
0     1    cola  sprite          1
1     1    cola   pepsi          2
2     1  sprite    cola          1
3     1  sprite   pepsi          2
4     1   pepsi    cola          2
5     1   pepsi  sprite          2
6     2    cola  sprite          3
7     2  sprite    cola          3

Articles connexes


Trouver le nombre de colonnes d'un tableau dans julia

Mohammad Saad J'ai essayé de trouver le nombre de colonnes d'un tableau , mais apparemment ncols, sizeet les lengthfonctions ne produisent pas la sortie désirée. Une suggestion sur la manière correcte de trouver le nombre de colonnes d'un tableau? Merci d'avan

Comment compter le nombre de colonnes spécifiques dans SQL?

user3486647 J'ai une table appelée Employés qui a beaucoup de colonnes mais je veux seulement compter quelques colonnes spécifiques de cette table. ie EmployeeID: 001 semaine1: 40 semaine2: 24 Semaine3: 24 Semaine4: 39 Cet employé (001) a deux semaines en dess

javascript : renvoie toutes les paires possibles dans le tableau

Hamid Bakhtiari le titre explique tout d'une manière ou d'une autre, j'aimerais utiliser la méthode "Combinaison" des mathématiques, voici la page Wikipedia pour être clair: https://en.wikipedia.org/wiki/Combination J'ai déjà trouvé la solution avec deux boucl