问题描述
我有一个超过 100 列的高维数据。作为一个例子,我正在分享它的简化版本,如下所示:
date product price amount
11/17/2019 A 10 20
11/24/2019 A 10 20
12/22/2020 A 20 30
15/12/2019 C 40 50
02/12/2020 C 40 50
我正在尝试根据下图所示的总行数计算列的百分比:
date product price amount
11/17/2019 A 10/(10+20) 20/(10+20)
11/24/2019 A 10/(10+20) 20/(10+20)
12/22/2020 A 20/(20+30) 30/(20+30)
15/12/2019 C 40/(40+50) 50/(40+50)
02/12/2020 C 40/(40+50) 50/(40+50)
有没有办法对高维数据有效地做到这一点?谢谢。
解决方法
除了提供的链接 (Normalize rows of pandas data frame by their sums) 之外,您还需要找到特定的列,因为前两列是非数字的:
cols = df.columns[2:]
df[cols] = df[cols].div(df[cols].sum(axis=1),axis=0)
Out[1]:
date product price amount
0 11/17/2019 A 0.3333333333333333 0.6666666666666666
1 11/24/2019 A 0.3333333333333333 0.6666666666666666
2 12/22/2020 A 0.4 0.6
3 15/12/2019 C 0.4444444444444444 0.5555555555555556
4 02/12/2020 C 0.4444444444444444 0.5555555555555556