将值仅乘以行数的一半

2024-09-27 19:29:55 发布

您现在位置:Python中文网/ 问答频道 /正文

熊猫1.1.4

MRE:

mre_df = pd.DataFrame({"dates":["2021-05-01", "2021-05-02", "2021-05-03","2021-05-04"],
                      "click":[3,2,3,4],
                      "imps":[123,122,444,443]})
mre_df["dates"] = pd.to_datetime(mre_df["dates"], format="%Y-%m-%d")
mre_df.set_index("dates", inplace=True)
mre_df["ctr"] = mre_df["click"]/mre_df["imps"] 

mre_df:

         click  imps    ctr
dates           
2021-05-01  3   123     0.024390
2021-05-02  2   122     0.016393
2021-05-03  3   444     0.006757
2021-05-04  4   443     0.009029

我想将ctr乘以一个值,但仅在“2021-05-02”之后的新列中

这是我的想法,但是我在寻找更稳定、干净、高效的方法。 编辑:由于HenryEcker的原因,已编辑了带有CopyWarning部分的设置

mre_df["rel_ctr"] = mre_df["ctr"]
mre_df.loc["2021-05-03":, "rel_ctr"] = mre_df.loc["2021-05-03":, "rel_ctr"] * 1.2

输出

          click imps    ctr     rel_ctr
dates               
2021-05-01  3   123     0.024390    0.024390
2021-05-02  2   122     0.016393    0.016393
2021-05-03  3   444     0.006757    0.008108
2021-05-04  4   443     0.009029    0.010835

Tags: toformat编辑dataframedfdatetimelocrel
2条回答

试试熊猫where

mre_df.assign(rle_ctr = mre_df.ctr.where(mre_df.index<="2021-05-02", 
                                         mre_df.ctr*1.2)
                )

            click  imps       ctr   rle_ctr
dates                                      
2021-05-01      3   123  0.024390  0.024390
2021-05-02      2   122  0.016393  0.016393
2021-05-03      3   444  0.006757  0.008108
2021-05-04      4   443  0.009029  0.010835

我不知道它是否更有效,但你可以用apply

import pandas as pd
import datetime

mre_df = pd.DataFrame(
    {
        "dates": ["2021-05-01", "2021-05-02", "2021-05-03", "2021-05-04"],
        "click": [3, 2, 3, 4],
        "imps": [123, 122, 444, 443],
    }
)

mre_df["dates"] = pd.to_datetime(mre_df["dates"], format="%Y-%m-%d")
mre_df.set_index("dates", inplace=True)
mre_df["ctr"] = mre_df["click"] / mre_df["imps"]

# create rel_ctr columb
mre_df["rel_ctr"] = mre_df.apply(
    lambda rw: rw["ctr"] * 1.2
    if rw.name >= datetime.datetime.strptime("2021-05-03", "%Y-%m-%d")
    else rw["ctr"],
    axis=1,
)

print(mre_df)

""" Sample Output

            click  imps       ctr   rel_ctr
dates
2021-05-01      3   123  0.024390  0.024390
2021-05-02      2   122  0.016393  0.016393
2021-05-03      3   444  0.006757  0.008108
2021-05-04      4   443  0.009029  0.010835

"""
   

相关问题 更多 >

    热门问题