我有一个pandas DataFrame,它按每月日期编制索引,包含1和0。
对于每个日期(行),我想对行求和,然后将每个数据点除以该和,以确定一段时间内的权重(如果数据点为零,则应保持为零)。
我的数据如下:
A B C D
01-2001 1 1 0 1
02-2001 1 0 0 1
03-2001 1 0 0 1
04-2001 1 1 1 1
05-2001 1 1 1 0
输出应该是这样的:
A B C D
01-2001 0.33 0.33 0 0.33
02-2001 0.5 0 0 0.5
03-2001 0.5 0 0 0.5
04-2001 0.25 0.25 0.25 0.25
05-2001 0.33 0.33 0.33 0
有人能帮忙吗?
您可以将div
与sum
:一起使用
print df.div(df.sum(axis=1), axis=0)
A B C D
01-2001 0.333333 0.333333 0.000000 0.333333
02-2001 0.500000 0.000000 0.000000 0.500000
03-2001 0.500000 0.000000 0.000000 0.500000
04-2001 0.250000 0.250000 0.250000 0.250000
05-2001 0.333333 0.333333 0.333333 0.000000
如果你需要round
:
print df.div(df.sum(axis=1), axis=0).round(2)
A B C D
01-2001 0.33 0.33 0.00 0.33
02-2001 0.50 0.00 0.00 0.50
03-2001 0.50 0.00 0.00 0.50
04-2001 0.25 0.25 0.25 0.25
05-2001 0.33 0.33 0.33 0.00