Как найти общую пару данных в python из заданных данных

У меня данные выглядят примерно так

Start Time         End Time       Trip Duration    Start Station   End Station 
01/01/17 15:09    01/01/17 15:14     321           A               B
01/02/17 15:09    01/02/17 15:14     321           C               D
12/03/17 15:09    12/03/17 15:14     321           E               F
05/01/17 15:09    05/01/17 15:14     321           B               D
17/02/17 15:09    17/02/17 15:14     321           A               B
12/04/17 15:09    12/04/17 15:14     321           E               H
13/05/17 15:09    13/05/17 15:14     321           S               K
17/01/17 15:09    17/01/17 15:14     321           A               B

Используя следующий код, я могу найти наиболее распространенную стартовую станцию

start_station = filtered['Start Station'].mode()[0]

Мне нужно найти наиболее распространенную поездку, то есть где пара начальной и конечной станций совпадают. Согласно приведенным выше данным, наиболее частыми должны быть поездки ч / б A и B.

Подскажите, пожалуйста, как найти обычную поездку

Есть много решений, но вот одно: составьте список списков с начальной и конечной станциями, которые будут выглядеть как [['A','B'],['C','D'],['E','F'],...], затем из этого списка создайте новый с количеством вхождений (функция count()) каждой комбинации вместо комбинации сам. Затем вам просто нужно найти максимальное значение в вашем новом списке и связать его с соответствующей комбинацией.

Mael Galliffet 26.10.2018 09:31
2
1
114
4

Ответы 4

Используйте GroupBy.size с nlargest или sort_values с iloc для выбора последнего значения.

Функция remove_unused_levels используется для удаления значений MultiIndex удаленными значениями Series.

a = (df.groupby(['Start Station','End Station'])
       .size()
       .nlargest(1)
       .index.remove_unused_levels()
       .tolist()
     )

Или:

a = (df.groupby(['Start Station','End Station'])
       .size()
       .sort_values()
       .iloc[[-1]]
       .index.remove_unused_levels()
       .tolist()
       )

print(a)
[('A', 'B')]

Если хотите вывести DataFrame:

df1 = (df.groupby(['Start Station','End Station'])
       .size()
       .reset_index(name='count')
       .nlargest(1, 'count')[['Start Station','End Station']]
)
print (df1)
  Start Station End Station
0             A           B

Вам нужно посчитать? Тогда попробуйте это:

df = pd.DataFrame({'Start':['A','B','C','D','A'],'End':['B']*5,'Trip Duration':[321]*5})
df.groupby(['Start','End'])['Trip Duration'].count().sort_values(ascending=False, na_position='first')

Я мог бы сделать это

trip = (filtered["Start Station"] + " -> " + filtered["End Station"]).mode()
# A -> B

Взгляните на этот Groupby Split применить комбинировать

Это должно дать вам широкий спектр функций агрегирования.

используя groupby:

import pandas as pd

counts = df.groupby(["Start_Station","End_Station"]).count()

print(counts)

                           Start_Time  End_Time  Trip_Duration  trip_id
Start_Station End_Station                                              
A             B                     3         3              3        3
B             D                     1         1              1        1
C             D                     1         1              1        1
E             F                     1         1              1        1
              H                     1         1              1        1
S             K                     1         1              1        1

используя value_counts и фиктивный столбец:

import pandas as pd

df["trip_id"] = df.Start_Station + df.End_Station

counts = df["trip_id"].value_counts()

print(counts)

AB    3
BD    1
EH    1
SK    1
EF    1
CD    1

Другие вопросы по теме