【问题标题】:Count values in column and assign to row计算列中的值并分配给行
【发布时间】:2020-08-03 14:32:28
【问题描述】:

我有一个这样的数据框:

    dT_sampleTime   steps      
0        0.002      0.001
1        0.004      0.002
2        0.004      0.003  
3        0.004      0.004  
4        0.003      0.005  
5        0.007      0.006
6        0.001      0.007 

我想计算 dT_sampleTime 列中 step 值出现的频率,并创建一个新列的绝对频率。

    dT_sampleTime   steps    absolute frequency    
0       0.002       0.001            1              
1       0.004       0.002            1
2       0.004       0.003            1
3       0.004       0.004            3
4       0.003       0.005            0
5       0.007       0.006            0
6       0.001       0.007            1

我的想法是这样的:

df['absolute frequency'] = df.groupby(df['steps'],df['dT_sampleTime']).count

【问题讨论】:

    标签: python pandas list histogram


    【解决方案1】:

    map 'steps' 列与'dt_sampleTime' 列的value_counts。然后用 0 填充缺失值。

    df['absolute frequency'] = (df['steps'].map(df['dT_sampleTime'].value_counts())
                                           .fillna(0, downcast='infer'))
    
    #   dT_sampleTime  steps  absolute frequency
    #0          0.002  0.001                   1
    #1          0.004  0.002                   1
    #2          0.004  0.003                   1
    #3          0.004  0.004                   3
    #4          0.003  0.005                   0
    #5          0.007  0.006                   0
    #6          0.001  0.007                   1
    

    当与 Series 进行映射时,它使用索引来查找适当的值。 value_counts 系列是

    df['dT_sampleTime'].value_counts()
    #0.004    3
    #0.007    1
    #0.001    1
    #0.002    1
    #0.003    1
    #Name: dT_sampleTime, dtype: int64
    

    例如,步骤列中的0.004 转到3

    【讨论】:

      【解决方案2】:
      • 循环遍历df
      • 将每行的steps 值用作应用于dT_sampleTime 列的过滤器
      • 生成的 DataFrame 中的行数是当前 steps 值在 dt_sampleTime 列中的绝对频率
      • 将此值附加到absolute frequency 字段下的当前行
      for i, row in df.iterrows():
           df.loc[i, 'absolute frequency'] = len(df[df['dT_sampleTime'] == row['steps']])
      

      根据您原始问题中给出的示例生成df

         dT_sampleTime  steps  absolute frequency
      0          0.002  0.001                 1.0
      1          0.004  0.002                 1.0
      2          0.004  0.003                 1.0
      3          0.004  0.004                 3.0
      4          0.003  0.005                 0.0
      5          0.007  0.006                 0.0
      6          0.001  0.007                 1.0
      

      我不确定这是实现您的目标的最有效方式,但它确实运作良好,应该适合您的目的。很高兴从任何人那里得到反馈,如果他们知道得更好并且会那么好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-04
        • 1970-01-01
        相关资源
        最近更新 更多