1
votes

Pandas: Groupby basé sur la sous-chaîne correspondante dans la colonne pandas

J'ai une liste qui contient des éléments comme:

for domain in list1:
    count = df.groupby( [df.Email_Address.str.find(domain)]).sum()

Maintenant, j'ai un dataframe qui ressemble à:

df:

abc.com     2
def.com     3
xyz.com     2

Je veux effectuer un décompte sur groupby basé sur la sous-chaîne où la sous-chaîne est les éléments de la liste.

Par conséquent, la sortie devrait ressembler à:

UserID    Email_Address
U001      u001@abc.com
U002      u002@xyz.com
U003      u003@xyz.com
U004      u004@abc.com
U004      u005@def.com
U006      u006@def.com
U007      u007@def.com

Mon code actuel:

emails= ['xyz.com', 'abc.com','def.com']


1 commentaires

Quelle est ta question? Quel est le problème ici ou quelle est la sortie que vous obtenez actuellement?


3 Réponses :


2
votes

Utilisez la série .str.extract pour obtenir des valeurs par listes et agréger par GroupBy.size :

pat = '|'.join(emails)
s = df['Email_Address'].str.extract('('+ pat + ')', expand=False)
df1 = df.groupby(s).size().reset_index(name='Count')
print (df1)
  Email_Address  Count
0       abc.com      2
1       def.com      3
2       xyz.com      2


0 commentaires

0
votes

Pour connaître les occurrences d'une valeur spécifique dans un dataframe, vous pouvez utiliser:

for domain in list1:
    len(df[df['Email_Address'] == domain])  # Save this value whatever you want

Donc je pense que vous cherchez quelque chose comme:

len(df[df['Email_Address'] == your_value])


0 commentaires

0
votes
def.com    3
abc.com    2
xyz.com    2
Name: Email, dtype: int64

0 commentaires