比较变量之间的百分比变化

Compare percentage variations between variables

我有会计 DataFrame 并想检查一些事实,但主要问题是他们不是在同一个联赛中“比赛”。

DF是这样的:

    A      B      C      D      E   
x   1     1.5    1.1    0.8     1
y  100    120    90     115     102
z  1000   1100  1800    900    1000

我想检查变量 ABCDE 之间的路径,所以结果应该是这样的:

           A      B      C      D      E  
    x(%)   0     50      10    -20     0

    y(%)   0     20     -10     15     2

    z(%)   0     10      80    -10     0

               A      B      C      D      E  
    x(%)   100     150      110    80     0

    y(%)   100     120      90     115    102

    z(%)   100     110      180    90    100

我的想法是:

df2 = df
df2.iloc[0]= ( (df2.iloc[0] * 100 ) / df2["A"].iloc[0] ) -100
df2.iloc[1]= ( (df2.iloc[1] * 100 ) / df2["A"].iloc[1] ) -100
df2.iloc[2]= ( (df2.iloc[2] * 100 ) / df2["A"].iloc[2] ) -100
# (-100 is for first example)

但是,您知道这种“非手动”方式吗?

数据:

{'A': {'x': 1, 'y': 100, 'z': 1000},
 'B': {'x': 1.5, 'y': 120, 'z': 1100},
 'C': {'x': 1.1, 'y': 90, 'z': 1800},
 'D': {'x': 0.8, 'y': 115, 'z': 900},
 'E': {'x': 1, 'y': 102, 'z': 1000}}

您可以将“A”转换为 numpy 列向量并使用广播:

df = (df / df["A"].to_numpy()[:, None] - 1) * 100

输出:

     A     B     C     D    E
x  0.0  50.0  10.0 -20.0  0.0
y  0.0  20.0 -10.0  15.0  2.0
z  0.0  10.0  80.0 -10.0  0.0