Pandas频率/计数 - 新df与现有df中的新列

时间:2017-03-15 11:35:00

标签: python pandas

我有一个数据框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  

我希望通过向下舍入LatitudeLongitude记录(lat_roundlng_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_roundlng_round记录将列添加到包含频率的原始数据框?

1 个答案:

答案 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