我有一个数据框df_original
:
Date Latitude Longitude lat_round lng_round
0 2017-02-06 25.1978 55.2816 25.198 55.282
1 2017-02-06 25.2707 55.3740 25.271 55.374
2 2017-02-06 25.2581 55.3291 25.258 55.329
256864 2017-02-05 25.0835 55.1425 25.084 55.143
256865 2017-02-05 25.2278 55.3273 25.228 55.327
我希望通过向下舍入Latitude
和Longitude
记录(lat_round
和lng_round
来对这些记录进行聚类)。目前,我通过以下方式创建新的数据框df
来完成此操作:
df = df_original.groupby(["lat_round","lng_round"]).size().reset_index(name="frequency")
df = df.sort_values(by='frequency',ascending=False)
然后我获取数据框df
:
lat_round lng_round frequency
0 25.245 55.361 5138
1 25.248 55.353 1907
2 25.249 55.352 1820
3 25.197 55.281 1293
但是,由于我希望实际提取所有单个记录(具有完整的Lat,Lng分辨率),因此这不是非常有用。如何根据lat_round
和lng_round
记录将列添加到包含频率的原始数据框?
答案 0 :(得分:1)
我认为您可以使用merge
:
print (pd.merge(df_original, df, on=['lat_round','lng_round']))
Date Latitude Longitude lat_round lng_round frequency
0 2017-02-06 25.1978 55.2816 25.198 55.282 1
1 2017-02-06 25.2707 55.3740 25.271 55.374 1
2 2017-02-06 25.2581 55.3291 25.258 55.329 1
3 2017-02-05 25.0835 55.1425 25.084 55.143 1
4 2017-02-05 25.2278 55.3273 25.228 55.327 1
join
的另一个解决方案:
df = df_original.groupby(["lat_round","lng_round"]).size()
df.name='frequency'
print (df)
lat_round lng_round
25.084 55.143 1
25.198 55.282 1
25.228 55.327 1
25.258 55.329 1
25.271 55.374 1
Name: frequency, dtype: int64
print (df_original.join(df, on=['lat_round','lng_round']))
Date Latitude Longitude lat_round lng_round frequency
0 2017-02-06 25.1978 55.2816 25.198 55.282 1
1 2017-02-06 25.2707 55.3740 25.271 55.374 1
2 2017-02-06 25.2581 55.3291 25.258 55.329 1
256864 2017-02-05 25.0835 55.1425 25.084 55.143 1
256865 2017-02-05 25.2278 55.3273 25.228 55.327 1