我的df1看起來像這樣:它包含 3 個獨特的專案id。date開始01-01-22和結束于01-12-28
| ID | 日期 | p50 | p90 |
|---|---|---|---|
| apv1 | 01-01-22 | 1000 | 1000 |
| apv2 | 01-01-22 | 1000 | 1000 |
| tsso | 01-01-22 | 1202 | 2005年 |
| apv1 | 01-02-22 | 1000 | 2000 |
| apv2 | 01-02-22 | 1400 | 5000 |
| tsso | 01-02-22 | 200 | 1000 |
| . | . | . | . |
| . | . | . | . |
| . | . | . | . |
| apv1 | 01-11-28 | 305 | 400 |
| apv2 | 01-11-28 | 300 | 200 |
| tsso | 01-11-28 | 250 | 499 |
| apv1 | 01-12-28 | 100 | 290 |
| apv2 | 01-12-28 | 145 | 650 |
| tsso | 01-12-28 | 299 | 179 |
df2看起來像這樣:
| 第 m 天 | 月 | 百分比 |
|---|---|---|
| 01 | 一月 | 0.042 |
| 02 | 二月 | 0.055 |
| 03 | 行進 | 0.089 |
| 04 | 四月 | 0.097 |
| 05 | 可能 | 0.10 |
| 06 | 六月 | 0.11 |
| 07 | 七月 | 0.127 |
| 08 | 八月 | 0.114 |
| 09 | 九月 | 0.091 |
| 10 | 十月 | 0.068 |
| 11 | 十一月 | 0.043 |
| 12 | 十二月 | 0.038 |
我想將df1的每個值p50乘以df2的值,或者值等于df1中的月份。同樣對于。pctmthmonthdatep90
最終的df應如下所示:
| ID | 日期 | p50 | p90 |
|---|---|---|---|
| apv1 | 01-01-22 | 1000*0.042 | 1000*0.042 |
| apv2 | 01-01-22 | 1000*0.042 | 1000*0.042 |
| tsso | 01-01-22 | 1202*0.042 | 2005*0.042 |
| apv1 | 01-02-22 | 1000*0.055 | 2000*0.055 |
| apv2 | 01-02-22 | 1400*0.055 | 5000*0.055 |
| tsso | 01-02-22 | 200*0.055 | 1000*0.055 |
| . | . | . | . |
| . | . | . | . |
| . | . | . | . |
| apv1 | 01-11-28 | 305*0.043 | 400*0.043 |
| apv2 | 01-11-28 | 300*0.043 | 200*0.043 |
| tsso | 01-11-28 | 250*0.043 | 499*0.043 |
| apv1 | 01-12-28 | 100*0.038 | 290*0.038 |
| apv2 | 01-12-28 | 145*0.038 | 650*0.038 |
| tsso | 01-12-28 | 299*0.038 | 179*0.038 |
uj5u.com熱心網友回復:
只需assign使用日期列的月份列。然后merge按月計算兩個資料幀。最后,使用所需的列運行乘法:
final_df = (
df1.assign(mth = lambda x: pd.to_datetime(x["date"]).dt.strftime("%m"))
.merge(df2, on="mth")
.assign(
p50 = lambda x: x["p50"].mul(x["pct"]),
p90 = lambda x: x["p90"].mul(x["pct"])
)
)
uj5u.com熱心網友回復:
您應該能夠使用map以下方式修改您的資料:
s = df2.set_index('mth')['pct']
pct = pd.to_datetime(df1['date']).dt.strftime('%m').map(s)
df1[['p50', 'p90']] *= pct
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/474656.html
上一篇:重復回圈多次
