Как сгруппировать разбитый текст и подсчитать их количество, используя панд Python? - PullRequest
0 голосов
/ 30 августа 2018

Введите:

import pandas as pd

df=pd.DataFrame({
    'Station':['001ABC006','002ABD008','005ABX009','007ABY010','001ABC006','002ABD008'],
    'Trains Passing':[55,56,59,96,95,96],
    'Destination':['MRK','MRK','MRS','MTS','KPS','KPS']

})

Мне нужно разделить текст Station от '001ABC006' до 'ABC' и создать список. Посчитайте только те значения, которые присутствуют в списке. Также группировка по назначению. Как я мог это сделать?

Выход:

  StationId ABC ABD ABX ABY
  MRK       1   1   0   0
  MRS       0   0   1   0
  MTS       0   0   0   1
  KPS       1   1   0   0

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Это называется кросс-табуляцией, и ссылка ниже показывает несколько способов сделать это.
См. : Как сделать сводку данных

crosstab

pd.crosstab(df.Destination, df.Station.str.replace('\d', ''))

Station      ABC  ABD  ABX  ABY
Destination                    
KPS            1    1    0    0
MRK            1    1    0    0
MRS            0    0    1    0
MTS            0    0    0    1

Заменить цифры

df.Station.str.replace('\d', '').value_counts()

ABC    2
ABD    2
ABY    1
ABX    1
Name: Station, dtype: int64

findall

import pandas as pd
import numpy as np
import re

i, r = pd.factorize(re.findall('(?i)([a-z]+)', '|'.join(df.Station)))
pd.Series(np.bincount(i), r)

ABC    2
ABD    2
ABX    1
ABY    1
dtype: int64
0 голосов
/ 30 августа 2018

Обновлено

In [180]: pd.crosstab(df.Destination, df.Station.str[3:6])
Out[180]:
Station      ABC  ABD  ABX  ABY
Destination                    
KPS            1    1    0    0
MRK            1    1    0    0
MRS            0    0    1    0
MTS            0    0    0    1

Вы можете использовать

In [160]: pd.DataFrame([df.Station.str[3:6].value_counts().to_dict()])
Out[160]:
   ABC  ABD  ABX  ABY
0    2    2    1    1

Или,

In [149]: df.Station.str[3:6].value_counts().to_frame().T
Out[149]:
         ABC  ABD  ABX  ABY
Station    2    2    1    1

Подробнее

In [162]: df.Station.str[3:6]
Out[162]:
0    ABC
1    ABD
2    ABX
3    ABY
4    ABC
5    ABD
Name: Station, dtype: object

In [163]: df.Station.str[3:6].value_counts()
Out[163]:
ABC    2
ABD    2
ABX    1
ABY    1
Name: Station, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...