2017-04-08 2 views
2

J'ai un ensemble de données de médias sociaux géo-localisés pour lesquels j'essaie de filtrer par la fréquence de user_id supérieur à 1 (utilisateurs qui ont posté 2 fois ou plus) . Je voudrais filtrer ceci afin que je puisse nettoyer davantage les données de trajectoire que je crée.Filtre Pandas df par le compte d'une colonne et écrire des données

Exemple de code:

# Import Data 
data = pd.read_csv('path', delimiter=',', engine='python') 
#print len(data),"rows" 
#print data 

# Create Data Fame 
df = pd.DataFrame(data, columns=['user_id','timestamp','latitude','longitude']) 
#print data.head() 

# Get a list of unique user_id values 
uniqueIds = np.unique(data['user_id'].values) 

# Get the ordered (by timestamp) coordinates for each user_id 
output = [[id,data.loc[data['user_id']==id].sort_values(by='timestamp')['latitude','longitude'].values.tolist()] for id in uniqueIds] 

# Save outputs 
outputs = pd.DataFrame(output) 
#print outputs 
outputs.to_csv('path', index=False, header=False) 

J'ai essayé d'utiliser df[].value_counts() pour obtenir un compte de user_id, puis passer> 1 dans la ligne output = [[......data['user_id']==id>1]..... cependant, qui ne fonctionne pas. Est-il possible d'ajouter la fréquence de user_id en tant qu'argument supplémentaire pour coder et extraire des informations uniquement pour ces utilisateurs?

données Exemple:

user_id, timestamp, latitude, longitude 
478134225, 3/12/2017 9:04, 38.8940974, -77.0276216 
478103585, 3/12/2017 9:04, 38.882584, -77.1124701 
478073193, 3/12/2017 9:07, 39.00027849, -77.09480086 
476194185, 3/12/2017 9:14, 38.8048355, -77.0469214 
476162349, 3/12/2017 9:16, 38.8940974, -77.0276216 
478073193, 3/12/2017 9:05, 38.8549, -76.8752 
477899275, 3/12/2017 9:08, 38.90181532, -77.03733586 
477452890, 3/12/2017 9:08, 38.96117237, -76.95561893 
478073193, 3/12/2017 9:05, 38.7188716, -77.1542684 
+0

double possible de [Python pandas géants: exclure les lignes ci-dessous un certain nombre de fréquences] (http://stackoverflow.com/questions/30485151/python-pandas-exclude-rows-below-a-certain-frequency- count) –

Répondre

2

Essayons de groupby alors la méthode filter qui renvoie uniquement les enregistrements qui évaluent aussi vrai dans la fonction de filtre. Dans ce cas, renvoyez True pour les groupes ou user_id qui ont plus d'un enregistrement.

df.groupby('user_id').filter(lambda x: x['user_id'].count()>1) 
+0

Cela a fait l'affaire. Était alors capable de créer une nouvelle DF filtrée pour faire référence au reste de mon code. Merci! –

+0

@AndrewR. Je vous en prie. –