2017-02-22 39 views
0

我檢查了this answer,但它只適用於整個列。在熊貓中乘以常數過濾的行

我有3列(名稱,日期,數值)

 Name   Dt Value 
0 aaaa 2018-01-01  100 
1 bbbb 2018-07-02  200 
2 aaaa 2019-01-01  300 
3 aaaa 2020-01-04  500 

一個數據幀有我也每年的比例因子的字典。我想要做的是將一年中的所有價值乘以相應的比例因子。

我試圖做這樣的

df[df['Name'] == a & df['Dt'].dt.year == i]['Value'] *= dictionary[i] 

這東西似乎並不奏效。有沒有辦法做到這一點沒有循環遍歷每一行?

回答

0

使用locmap

d = {2018: 100, 2019: 1000, 2020: 10000} 

df.loc[ 
    (df.Name == 'aaaa') & (df.Dt.dt.year == 2018), 'Value' 
] *= df.Dt.dt.year.map(d) 

print(df) 

    Name   Dt Value 
0 aaaa 2018-01-01 10000.0 
1 bbbb 2018-07-02 200.0 
2 aaaa 2019-01-01 300.0 
3 aaaa 2020-01-04 500.0