首页 > 解决方案 > 如何计算循环数据框中满足条件的值?

问题描述

我有一个df带有系列 inDistanz和系列 in的熊猫Zielcode。我需要将 Distanz 除以重复的间隔数。所以第一个不为零的间隔将除以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

标签: pythondataframecount

解决方案


我会把问题分成不同的步骤。

  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

推荐阅读