J'essaie de compter le nombre de fois qu'un enregistrement a une fréquence supérieure à 3 dans ma colonne pandas 'Subject' - regroupée par date.

Actuellement, ce code fonctionne, mais il concerne l'ensemble de la trame de données.

main_subj = df['Subject'].value_counts(
[df['Subject'].value_counts()>3] count_main_subj = main_subj.shape[0]

Je voudrais regrouper les données par 'date' - afin de voir combien d'enregistrements ont une fréquence supérieure à 3 chaque jour.

Ma trame de données ressemble à ceci:

Subject  Verb     Object     ID         Date
trump     got     jobs        820108    20170803
voters    begin   to          182912    20170803
steve     miss    colleague   980828    20170804

Par exemple si un jour il y avait 10 enregistrements: 5 avec le sujet atout 3 avec le sujet clinton 2 avec le sujet obama

Le résultat serait 2 - le nombre de sujets qui se produisent plus de 3 fois.

Je vous remercie!

0
C L 13 avril 2018 à 17:59

3 réponses

Meilleure réponse

Vous pouvez utiliser:

(df.groupby(['Date', 'Subject']).size() >= 3).sum()

Exemple:

In [227]: df
Out[227]:
  Subject   Verb     Object      ID      Date
0   trump    got       jobs  820108  20170803
1  voters  begin         to  182912  20170803
2   steve   miss  colleague  980828  20170804
3   trump    got       jobs  820108  20170803
4   trump    got       jobs  820108  20170803

In [228]: (df.groupby(['Date', 'Subject']).size() >= 3).sum()
Out[228]: 1

Si vous souhaitez obtenir un décompte par date:

d = (df.groupby(['Date', 'Subject']).size() >= 3).reset_index()
d[d[0]].groupby('Date').size()
0
user3483203 13 avril 2018 à 15:45

En supposant que vous ayez une colonne nommée date, vous pouvez grouper par date

df.groupby('date').size()

Ou

df[['Subject', 'date']].groupby('date').size()

Cela produira avec le nombre dont vous avez besoin

0
Arpit Solanki 13 avril 2018 à 15:06

On dirait que vous avez besoin

s=df.groupby(['Date','Object']).size()
len(s[s>3])
0
YOBEN_S 13 avril 2018 à 15:14