首页 > 解决方案 > 在熊猫数据框中检测星期六并修改行中的值

问题描述

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

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

 

我想根据 column 检测哪一行落在星期六Date_YMD。找出volume这个星期六的值并用两倍的值替换它。对于上表,它应该14224属于带有 的行Date_YMD 20200926

最终的数据框应该是这样的;

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   28448.0  

我正在使用python 3.8。

标签: python-3.xpandasdataframe

解决方案


将列转换为日期时间,然后通过选择与Series.dt.dayofweek和比较的多个值DataFrame.loc

df['Date_YMD'] = pd.to_datetime(df['Date_YMD'], format='%Y%m%d')

df.loc[df['Date_YMD'].dt.dayofweek.eq(5), 'volume'] *= 2
print (df)
  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  62295.0
4  bottle_a   AX80 2020-09-26  12880.0  13000.00  28448.0

推荐阅读