Отдельные пары в подвижном окне Панды - PullRequest
0 голосов
/ 26 ноября 2018

Привет. Я пытаюсь посчитать различные значения пары между портами и адресами.

По сути, это точный сценарий, в котором я хочу, чтобы значение rolloing_count было равно числу значений PORT и ADDRESS, когда строка входит в окно.

Подсчет различных строк в скользящем окне с помощьюpandas + python (с условием)

Однако ответ на вопрос неправильный, и не было никаких последующих действий по его решению.

Допустим, у меня есть таблица

ID  PORT    ADDRESS  
1    21     ad3  
2    22     ad1       
3    23     ad2      
4    23     ad2            
5    21     ad4            
6    22     ad1            
7    22     ad1            
8    21     ad4  

, например, если бы у меня был размер окна 3, мой желаемый результат был бы

 ID  PORT    ADDRESS  rolling_count
 1    21     ad3            1
 2    22     ad1            1
 3    23     ad2            1
 4    23     ad2            2
 5    21     ad4            1
 6    22     ad1            1
 7    22     ad1            2
 8    21     ad4            1

Ответ на связанный постКажется, я считаю только в пределах окна

df['rolling_count']=df.groupby('ADDRESS').PORT.apply(lambda x : pd.Series(x).rolling(3,min_periods=1).apply(lambda y: len(set(y))))

- это то, что я пытался использовать, и это не правильно.Это то, что он выводит

 ID  PORT    ADDRESS  rolling_count
 1    21     ad3            1
 2    22     ad1            1
 3    23     ad2            1
 4    23     ad2            1
 5    21     ad4            1
 6    22     ad1            1
 7    22     ad1            1
 8    21     ad4            1

Любая обратная связь будет полезна.

1 Ответ

0 голосов
/ 26 ноября 2018

для вашего приложения, вы можете выбрать подсчет повторяющихся значений порта и адреса в образце последовательности.1) Повторяющиеся окна в последовательности по выбранной вами длине окна, что приводит к подсчету значений в разных местах.

from collections import Counter
def unique_values(x,window):
    # External numpy array to generate windows
    a = (np.arange(window)[None, :] + np.arange(len(x))[:, None])-(window-1)
    b = np.where(a<0,0,a)
    return [max(Counter(i).values()) for i in np.where(a<0,a,x.values.take(a))]
unique_values(df.PORT.astype(str) +df.ADDRESS,3)    

Out:

[1, 1, 1, 2, 2, 1, 2, 2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...