如何找到数据框中 X 列的百分比变化?
how do I find the percent change from column X in dataframe?
我有一个 49x10 的数据框,我需要找到每个索引项到该行中特定列的每个索引项的百分比变化。
这是 5x10 的数据帧示例。
-15 -10 -5 -2 -1 0 1 2 5 10 15
symbol
ADS 80.098282 77.709549 72.130524 69.178314 72.947937 74.548950 75.364349 77.907074 79.691963 73.998260 67.965523
BEPC 49.635834 48.256989 45.957493 45.627144 47.968739 49.610779 48.056187 49.659355 56.013733 56.412094 59.579567
CBSH 70.400002 69.800003 70.533333 66.476189 65.250000 66.910004 66.180000 68.809998 68.089996 68.839996 68.110001
CIG 2.014711 2.097131 2.225340 2.371864 2.280286 2.089544 2.070374 2.127884 2.127884 2.204564 2.377095
CPE 12.200000 13.100000 11.800000 11.100000 10.400000 10.690000 10.050000 10.040000 8.340000 6.920000 6.630000
基本上,对于第 0 列,我试图找到以该日期为中心的百分比变化。
我已经完成了:
for col in df.columns:
df[col] = (df[col] - df['0'])/df['0']*100
但是,returns 数据框如下所示:
-15 -10 -5 -2 -1 0 1 2 5 10 15
symbol
ADS 7.443876 4.239629 -3.244079 -7.204174 -2.147600 0.0 inf inf inf inf inf
BEPC 0.050503 -2.728823 -7.363896 -8.029777 -3.309846 0.0 inf inf inf inf inf
CBSH 5.215958 4.319234 5.415228 -0.648356 -2.480950 0.0 inf inf inf inf inf
CIG -3.581304 0.363103 6.498839 13.511108 9.128440 0.0 inf inf inf inf inf
CPE 14.125353 22.544442 10.383542 3.835368 -2.712815 0.0 inf inf inf inf inf
脚本正在修改 df['0']
,但我不确定如何找到解决方法。预期结果将是 df['0']
的百分比变化,因为它在 0 位置迭代之前发生了什么。
如有任何帮助,我们将不胜感激。
由于“0”列是您的参考,因此您不应更改它(因为它与自身的变化始终为 0%):
for col in df.columns:
if col == '0':
continue # Skip the reference column
df[col] = (df[col] - df['0'])/df['0']*100
@nonDucor 的回答发现了错误,但我会谨慎地将百分比与绝对值混合使用。 (所有列均以百分比表示,但您保持不变的列“0”除外)。要完成答案,您应该在末尾更新参考列的百分比。
# Compute percentages for all non-reference columns
for col in df.columns.drop('0'):
df[col] = (df[col] - df['0'])/df['0']*100
# Update the reference columne
df['0'] = 0.0
我有一个 49x10 的数据框,我需要找到每个索引项到该行中特定列的每个索引项的百分比变化。
这是 5x10 的数据帧示例。
-15 -10 -5 -2 -1 0 1 2 5 10 15
symbol
ADS 80.098282 77.709549 72.130524 69.178314 72.947937 74.548950 75.364349 77.907074 79.691963 73.998260 67.965523
BEPC 49.635834 48.256989 45.957493 45.627144 47.968739 49.610779 48.056187 49.659355 56.013733 56.412094 59.579567
CBSH 70.400002 69.800003 70.533333 66.476189 65.250000 66.910004 66.180000 68.809998 68.089996 68.839996 68.110001
CIG 2.014711 2.097131 2.225340 2.371864 2.280286 2.089544 2.070374 2.127884 2.127884 2.204564 2.377095
CPE 12.200000 13.100000 11.800000 11.100000 10.400000 10.690000 10.050000 10.040000 8.340000 6.920000 6.630000
基本上,对于第 0 列,我试图找到以该日期为中心的百分比变化。 我已经完成了:
for col in df.columns:
df[col] = (df[col] - df['0'])/df['0']*100
但是,returns 数据框如下所示:
-15 -10 -5 -2 -1 0 1 2 5 10 15
symbol
ADS 7.443876 4.239629 -3.244079 -7.204174 -2.147600 0.0 inf inf inf inf inf
BEPC 0.050503 -2.728823 -7.363896 -8.029777 -3.309846 0.0 inf inf inf inf inf
CBSH 5.215958 4.319234 5.415228 -0.648356 -2.480950 0.0 inf inf inf inf inf
CIG -3.581304 0.363103 6.498839 13.511108 9.128440 0.0 inf inf inf inf inf
CPE 14.125353 22.544442 10.383542 3.835368 -2.712815 0.0 inf inf inf inf inf
脚本正在修改 df['0']
,但我不确定如何找到解决方法。预期结果将是 df['0']
的百分比变化,因为它在 0 位置迭代之前发生了什么。
如有任何帮助,我们将不胜感激。
由于“0”列是您的参考,因此您不应更改它(因为它与自身的变化始终为 0%):
for col in df.columns:
if col == '0':
continue # Skip the reference column
df[col] = (df[col] - df['0'])/df['0']*100
@nonDucor 的回答发现了错误,但我会谨慎地将百分比与绝对值混合使用。 (所有列均以百分比表示,但您保持不变的列“0”除外)。要完成答案,您应该在末尾更新参考列的百分比。
# Compute percentages for all non-reference columns
for col in df.columns.drop('0'):
df[col] = (df[col] - df['0'])/df['0']*100
# Update the reference columne
df['0'] = 0.0