关于 pandas dataframe 反转列的数据顺序

about pandas dataframe reverse column's data order

代码

import pandas as pd
import numpy as np

df = pd.DataFrame({"K1":[1,2,3],"K2":[4,5,6]})
df["result"] = (df["K1"].shift(1)*df["K2"]).fillna(1)[::-1] #line A
print(df["result"])
print((df["K1"].shift(1)*df["K2"]).fillna(1)[::-1]) #line B
print((df["K1"].shift(1)*df["K2"]).fillna(1)) # line C

输出

0     1.0
1     5.0
2    12.0
Name: result, dtype: float64

2    12.0
1     5.0
0     1.0
dtype: float64

0     1.0
1     5.0
2    12.0
dtype: float64

为什么列结果在 A 行中没有得到相反的顺序但在 B 行中有效?

通过使用 [::-1],您正在反转系列,包括索引(正如您在打印中看到的那样)。因此,index-value 对保持不变。 Pandas 将使用系列索引将其与 df DataFrame 中的现有索引对齐。要解决这个问题,您需要将原始值分配给列,而不是 Pandas 系列,例如通过使用 .to_numpy().

df["result"] = (df["K1"].shift(1)*df["K2"]).fillna(1).to_numpy()[::-1] #line A