比较后将当前行值分配给熊猫数据框的前一行

时间:2020-09-26 10:26:10

标签: python python-3.x pandas dataframe

我在下面的python中有panda数据框。

full_name  serial  Date_YMD        prc1     prc2    volume
 bottle_a  AX80    20200922    12874.50  12927.75   61023.0 
 bottle_a  AX80    20200923    12878.50  12926.75   61023.0
 bottle_a  AX80    20200924    12872.50  12928.75   61023.0
 bottle_a  AX80    20200925    12885.50  12984.25   62295.0
 bottle_a  AX80    20200926    12880.00  13000.00   14224.0

首先,我想根据第Date_YMD列检测哪个行在星期六。然后,找出上周六的音量值,如果上一行的值大于当前行的值,则将该值分配给上一行的volume

最后一张表格的最终熊猫框架看起来像这样;

full_name  serial  Date_YMD        prc1     prc2    volume
 bottle_a  AX80    20200922    12874.50  12927.75   61023.0 
 bottle_a  AX80    20200923    12878.50  12926.75   61023.0
 bottle_a  AX80    20200924    12872.50  12928.75   61023.0
 bottle_a  AX80    20200925    12885.50  12984.25   14224.0
 bottle_a  AX80    20200926    12880.00  13000.00   14224.0

周六交易量可以通过以下代码获取;

df['Date_YMD'] = pd.to_datetime(df['Date_YMD'], format='%Y%m%d')
sat_volume = df.loc[df['Date_YMD'].dt.dayofweek.eq(5), 'volume']

问题是比较值之后,如何将这个sat_volume分配给上一行的volume

我正在使用python 3.8

1 个答案:

答案 0 :(得分:2)

让我们创建布尔掩码m1m2,然后将布尔索引与这些掩码一起使用,以填充volume所在的列m1 }和m2满足:

m1 = df['volume'] > df['volume'].shift(-1)
m2 = df['Date_YMD'].shift(-1).dt.weekday.eq(5)
df.loc[m1 & m2, 'volume'] = df['volume'].shift(-1)

  full_name serial   Date_YMD     prc1      prc2   volume
0  bottle_a   AX80 2020-09-22  12874.5  12927.75  61023.0
1  bottle_a   AX80 2020-09-23  12878.5  12926.75  61023.0
2  bottle_a   AX80 2020-09-24  12872.5  12928.75  61023.0
3  bottle_a   AX80 2020-09-25  12885.5  12984.25  14224.0
4  bottle_a   AX80 2020-09-26  12880.0  13000.00  14224.0