【问题标题】:Divide dataframe column value by the total of the column将数据框列值除以列的总数
【发布时间】:2021-05-26 12:09:43
【问题描述】:

我的问题对你们中的许多人来说可能太简单了,但因为我是 Python 的初学者..

我想获得包含 3 个不同可能值 (1,0,-1) 的列的值百分比,但要排除列中的一个值(即 -1)。

我这样做了:(df['col_name']).sum()/len(df.col_name)

但是它也计算其中的 -1,而我只想获得值 1/总和的百分比,但总和中没有 -1。

感谢您的帮助。

【问题讨论】:

  • 你能补充一些例子吗?

标签: python pandas dataframe formula division


【解决方案1】:

对于排除值,将-1 替换为缺失值:

df['col_name'].replace(-1, np.nan).sum()/len(df.col_name) 

如果需要计算过滤系列的长度,或者过滤掉-1 值:

np.random.seed(123)
df = pd.DataFrame({'col_name':np.random.choice([0,1,-1], size=10)})

print (df)
   col_name
0        -1
1         1
2        -1
3        -1
4         0
5        -1
6        -1
7         1
8        -1
9         1

s = df.loc[df['col_name'] != -1, 'col_name']
print (s)
1    1
4    0
7    1
9    1
Name: col_name, dtype: int32

print (s.sum()/len(s))
0.75

print (s.mean())
0.75

【讨论】:

    【解决方案2】:

    假设你有这个数据框

    df = pd.DataFrame({
        'col_name': [1,1,0,-1,-1,1,0]
        })
    
        col_name
    0   1
    1   1
    2   0
    3   -1
    4   -1
    5   1
    6   0
    

    您想计算 1 的数量除以没有 -1 的总数,即 5 中的 3,对吗?

    numerator = sum(df['col_name'].apply(lambda x: 1 if x==1 else 0))
    denominator = sum(df['col_name'].apply(lambda x: 0 if x==-1 else 1))
    print(numerator/denominator)
    

    输出0.6

    【讨论】:

      猜你喜欢
      • 2022-06-22
      • 2019-04-10
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-08
      • 2021-12-28
      • 2016-05-29
      相关资源
      最近更新 更多