我有DataFrame
个列time
,latitude
和longitude
。它看起来像这样:
>>> df.head()
time latitude longitude
0 2011-12-16 08:09:07 42.386391 -71.013544
1 2011-12-16 08:09:08 42.386391 -71.013544
2 2011-12-16 08:09:09 42.386391 -71.013544
3 2011-12-16 08:09:10 42.386391 -71.013544
4 2011-12-16 08:09:11 42.386391 -71.013544
我想做的是估计一个人住在哪里。最简单的方法是在当天最早的时刻获取其位置的模式(最常见)。
我的数据框有超过700,000行,跨越大约3个月,每秒4-8小时的数据!所以我需要做的是从每天的前几秒中找到最常见的(纬度,经度)对。
如果我想使用整个数据集而不是每天的前几秒,我可以执行以下操作:
l = []
for i in range(len(df)-1):
l.append((df.latitude[i],df.longitude[i]))
import collections
answer = collections.Counter(l).most_common(1)
这可能是也可能不是最有效的方式,如果你有更好的工作方式,请随意在答案中使用。这一点的重要部分是我仅从每天获取前几个值。
谢谢。
注意:每天的开始时间会有所不同。
答案 0 :(得分:0)
我认为这会奏效,我在这里使用时间,但同样的想法 然后按日期分组 你的函数返回前3个值的中位数(如果有更少的话,则返回更少)
In [23]: df = DataFrame(randn(2000,2),
index=date_range('20130101',periods=2000,freq='H'))
In [24]: df
Out[24]:
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 2000 entries, 2013-01-01 00:00:00 to 2013-03-25 07:00:00
Freq: H
Data columns (total 2 columns):
0 2000 non-null values
1 2000 non-null values
dtypes: float64(2)
In [21]: def f(frame):
....: if len(frame) > 3:
....: frame = frame.iloc[0:4,:]
....: return frame.median()
....:
In [25]: df.resample('D',how=f).head(20)
Out[25]:
0 1
2013-01-01 -1.168960 0.752771
2013-01-02 0.252991 0.257350
2013-01-03 0.823164 0.246403
2013-01-04 -0.253409 -0.099833
2013-01-05 0.328023 -0.308967
2013-01-06 -0.086218 -1.090935
2013-01-07 0.073870 0.256468
2013-01-08 -0.551869 0.332902
2013-01-09 0.267126 0.232623
2013-01-10 0.305948 0.460094
2013-01-11 -0.088975 -1.080070
2013-01-12 -0.587940 0.391419
2013-01-13 -0.220146 0.380210
2013-01-14 -0.689020 -0.873559
2013-01-15 0.576461 -0.184413
2013-01-16 0.258620 0.221407
2013-01-17 -0.385102 0.376829
2013-01-18 0.096542 0.331183
2013-01-19 0.385703 0.241587
2013-01-20 -1.119306 -0.210429
答案 1 :(得分:0)
您可以将中位数的开始日期位置放在一行中。
df.set_index('time').resample('D', how='first').median()
这只考虑每天的第一个位置,而不是前几个位置,但如果每秒采样一次,在我看来,第一个位置和前几个位置可能大致相同。