Pandas插入从一列到下一列的百分比差异



例如,如何从中获取

a   b   c
0   1   2   3
1   4   5   6

a   a->b     b   b->c  c    c->a
0   1   200%     2   150%  3    33%
1   4   125%     5   120%  6    66%

我试过类似的东西

df = pd.DataFrame(pd.np.arange(6).reshape(2, 3) + 1, columns=list("abc"))
for c1, c2 in [[0, 1], [1, 2], [2, 3]]:
df[f"{c1}/{c2}"] = 100 * df.iloc[:, c1] / df.iloc[:, c2]

以及重新排序列(因为这会在末尾附加所有新列(,但它超级不可读,看起来像Pandas反模式。

更新

我应该提到的是,依赖列名中的模式是不好的,因为没有模式,即它们没有编号/字母顺序等。

我们可以使用numpyroll

df = df.join(pd.DataFrame(df.values/np.roll(df.values, -1, axis=1),
columns=df.columns + '/' + np.roll(df.columns,-1), 
index=df.index))
Out[83]: 
a  b  c  a/b       b/c  c/a
0  1  2  3  0.5  0.666667  3.0
1  4  5  6  0.8  0.833333  1.5

最新更新