Как посчитать значения, которые удовлетворяют условию в oop кадре данных? - PullRequest
0 голосов
/ 03 марта 2020

У меня есть pandas df с серией в Distanz и серией в Zielcode. Мне нужно разделить Дистанц на количество интервалов, которые повторяются. Таким образом, первый интервал, отличный от нуля, будет разделен на one, второй на three, а третий на two.

Distanz    Zielcode
0.0         0
0.0         0
1.1         2
0.0         0
8.0         7
8.0         7
8.0         7
0.0         0
3.4         1
3.4         1
0.0         0

Как рассчитать количество интервалов во всей серии, которые удовлетворяют этому условию повтора, и разделить значение distanz на это количество?

Требуемый результат должен выглядеть следующим образом:

Distanz    Zielcode       Distanz - Output
0.0         0               0.0
0.0         0               0.0
1.1         2               1.1
0.0         0               0.0
8.0         7               2.7
8.0         7               2.7
8.0         7               2.7
0.0         0               0.0
3.4         1               1.7
3.4         1               1.7
0.0         0               0.0

1 Ответ

0 голосов
/ 03 марта 2020

Я бы разбил проблему на несколько этапов.

  1. Определение повторяющихся элементов:

    block = ((df['Distanz'].shift() != df['Distanz']) |
             (df['Zielcode'].shift() != df['Zielcode'])).cumsum()
    

    Это дает:

    0     1
    1     1
    2     2
    3     3
    4     4
    5     4
    6     4
    7     5
    8     6
    9     6
    10    7
    dtype: int32
    
  2. Вычислить размер каждого блока:

    count = df.groupby(block).apply(lambda x: x.assign(count=len(x))
                                    )['count'].reset_index(level=0, drop=True)
    

    Это дает:

    0     2
    1     2
    2     1
    3     1
    4     3
    5     3
    6     3
    7     1
    8     2
    9     2
    10    1
    Name: count, dtype: int64
    
  3. Вычислить новый столбец:

    df['Distanz - Output'] = df['Distanz'] / count
    

И кадр данных становится:

    Distanz  Zielcode  Distanz - Output
0       0.0         0          0.000000
1       0.0         0          0.000000
2       1.1         2          1.100000
3       0.0         0          0.000000
4       8.0         7          2.666667
5       8.0         7          2.666667
6       8.0         7          2.666667
7       0.0         0          0.000000
8       3.4         1          1.700000
9       3.4         1          1.700000
10      0.0         0          0.000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...