计算具有a = x列和b = y列的行数(groupby,value_count)

时间:2019-02-07 14:52:36

标签: python python-3.x dataframe count

你好,我试图用一些真实数据学习一些新的python,但是我陷入了困境。

可以在此处找到数据(https://edinburghcyclehire.com/open-data/historical)。选择任何月份和csv格式。我想计算一下从一个车站到另一个车站的旅行次数。

导入后:

data = pd.read_csv('09.csv')

有“ start_station_id”和“ end_station_id”列。

我想计算从每个站点到另一个站点的旅行次数,即有多少行:“ a到b”,“ a到c”,“ b到a”,等等(注意:最初“ a到b”和“ b到a”应该是不同的旅程,尽管我也很想听到我将如何将“ a到b”和“ b到a”视为同一旅程进行计数)。

我认为我需要使用groupby和/或value_counts,但是在阅读文档和浏览堆栈后我不知道如何实现它。

任何建议将不胜感激。

2 个答案:

答案 0 :(得分:2)

使用 group_by 查找station_a和station_b的唯一组合

例如:

df = df.groupby(['start_station_name','end_station_name']).count()
count = len(df)
print(count)

请注意,必须将汇总函数应用于 group_by 的结果。聚合函数是诸如 count(),mean(),max()等函数。这些方法将指定如何聚合分组行中的数据。在这种情况下,您使用 count(),因为我们要计算每次旅行的次数

编辑

df = df.groupby(['start_station_name','end_station_name']).count()

请注意,在此行^^^中调用 count(),会将数据框中的所有列设置为该行进的次数。

例如

                                                    started_at  ended_at  duration          ...            end_station_description  end_station_latitude  end_station_longitude
start_station_name  end_station_name    

                                            ...                                                                                
Bristo Square       Bristo Square                            1         1         1          ...                                  1                     1                      1
                    Brunswick Place                          6         6         6          ...                                  6                     6                      6
                    Canonmills                               1         1         1          ...                                  1                     1                      1
                    Castle Street                            1         1         1          ...                                  1                     1                      1

请注意, started_at end_at 等的所有值都相同。现在将所有这些设置为该旅程进行了多少次的计数。即从布里斯托广场到不伦瑞克的旅程进行了6次

答案 1 :(得分:1)

您可以使用布尔代数! 你可以做

data['start_station_id'] == 183

获取布尔地图,其中唯一的True的start_Station_id为183 同样,您可以

data['end_station_id'] == 261

您可以将两者结合起来并获得

bmap = (data['start_station_id'] == 183) & (data['end_station_id'] == 261)

请注意括号很重要!

这将为您提供一张地图,起始站与终点站相匹配,然后您可以查看此数据 data[bmap]