面板数据中的权重 - Pandas

Weights in Panel Data - Pandas

我有一个 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 with 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