比较变量之间的百分比变化
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
我有会计 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