2017-04-08 12 views
2

私はuser_idの頻度でフィルタリングしようとしている地理的に位置するソーシャルメディア投稿のデータセットを持っています(2回以上投稿したユーザ) 。これをフィルタリングして、私が作成している軌跡データをさらにきれいにすることができます。フィルタ列数と書き込みデータによるパンダのdf

サンプルコード:

# 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) 

私はUSER_IDのカウントを取得した後、しかしラインoutput = [[......data['user_id']==id>1].....に> 1を渡すためにdf[].value_counts()を使用してみましたが、うまくいきませんでした。コードに追加の引数としてuser_idの頻度を追加して、そのユーザーのみの情報を抽出することは可能ですか?

サンプルデータ:

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

[Pythonのパンダ:特定の周波数のカウント以下の行を除外]の可能複製(http://stackoverflow.com/questions/30485151/python-pandas-exclude-rows-below-a-certain-frequency-カウント) –

答えて

2

のは、フィルタ機能で真として評価するレコードだけを返すfilter方法、その後groupbyにしてみましょう。この場合、複数のレコードを持つグループまたはuser_idに対してTrueを返します。

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

それはトリックでした。その後、新しいフィルタリングされたdfを作成して、残りのコードを参照できるようになりました。ありがとう! @AndrewR。 –

+0

どういたしまして。 –

関連する問題