【问题标题】:How to count values that meet a condition in a loop dataframe?如何计算循环数据框中满足条件的值?
【发布时间】:2020-03-03 20:28:12
【问题描述】:

我有一个熊猫df,在Distanz 中有一个系列,在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

【问题讨论】:

    标签: python dataframe count


    【解决方案1】:

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

    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
    

    【讨论】:

    • @Roldany:如果您不再需要这个问题的帮助,请接受答案(旁边的复选标记),以便将来的读者清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 2019-07-15
    • 2019-04-30
    相关资源
    最近更新 更多