J'ai une énorme base de données df en termes de lignes totales. En fait, elle contient trop de lignes. Et je dois limiter le nombre de lignes de manière raisonnable tout en maintenant que chacun des films aura le même nombre d'avis dans la trame de données (actuellement, cela varie considérablement)

Trame de données a une forme comme celle-ci

La première colonne est userID, la deuxième colonne est animeID (movieID essentiellement) la troisième colonne est juste la note de ce film de l'utilisateur sur ce film. Chaque ligne est une critique de film. Il devrait y avoir environ 300 movieID dans la colonne animeID.

Ce que je dois faire dans les pandas est de limiter la quantité de lignes de sorte que je rééchantillonne cette trame de données pour n'avoir que quelque chose comme 5 lignes par animeID (c'est-à-dire le movieID) et que la nouvelle trame de données ne devrait avoir que ces lignes nouvellement échantillonnées. Je suis totalement coincé sur la façon de faire cela dans les pandas.J'aurais peut-être pu le faire dans Excel un peu facilement, mais je ne veux pas séparer tout mon prétraitement en étapes Excel et en étapes Pandas ...

Je suis à peu près sûr que chaque animeID devrait avoir au moins 1000 lignes (chaque ligne est une critique de film individuelle, mais cela pourrait avoir été par le même utilisateur ou un utilisateur différent). J'ai juste besoin de limiter le nombre de lignes (critiques de films) afin que tous les films aient encore des critiques à leur sujet, mais je suis toujours en mesure de traiter les données.

J'aurai environ 300 films (300 animeID) à partir desquels je sais que ces films auront eu au moins 1000 critiques sur chacun d'eux, et je l'aurai déjà fait. Donc, le principal problème est que certains films ont juste énormément de critiques à leur sujet comme des dizaines de milliers ou quelque chose.

dataframe

1
Late347 11 mars 2019 à 09:26

2 réponses

Meilleure réponse

Je ne peux penser à aucune fonction unique applicable à votre cas. Au lieu de cela, vous pouvez essayer de suivre les lignes où df est la trame de données d'origine à partir de laquelle vous souhaitez échantillonner:

current_row=0
df_sample=pd.DataFrame([],columns=df.columns)
for i in np.unique(df['animeID']):
      new_sample=df[df['animeID']==i].sample(n=5)
      df_sample=pd.concat([df_sample,new_sample],axis=0)
0
Zhu junior 11 mars 2019 à 06:51

Essayez de convertir le Dataframe en un tableau Numpy. Le problème se réduira à simplement jouer avec les tableaux. Le code pour convertir le Dataframe en un tableau est:

<numpy_array_name> = <dataframe_name>.values

J'espère que cela vous aide. Si vous souhaitez toujours travailler avec les cadres de données, consultez ceci article.

0
Geeth Govind S 11 mars 2019 à 06:37