替换熊猫数据框中的值时 for 循环的问题

时间:2021-01-28 15:13:42

标签: python pandas for-loop

以下代码行将 2020 年 4 月的值替换为大熊猫数据框中前四年同月的平均值。

df.loc[df['Time'] == '2020-04-30', 'value'] = df.loc[df['column'].isin(['2019-04-30', '2018-04-30', '2017-04-30', '2016-04-30' ]), 'value'].mean()

我想在 5 月、6 月、7 月等日做同样的操作,并开始处理 for 循环。我之前没有使用四个不同的值进行循环,我尝试了上述方法。但它似乎只适用于第一次迭代?我错过了什么?

date = [('2020-04-30', '2019-04-30', '2018-04-30', '2017-04-30', '2016-04-30'),
       ('2020-05-30', '2019-05-30', '2018-05-30', '2017-05-30', '2016-05-30')]

for i, j, k, l, m in date:
    df1.loc[df1['Time'] == i, 'AF_ARBETSLOSA'] = df1.loc[df1['Time'].isin([j, k, l, m]), 'AF_ARBETSLOSA'].mean()

我也试过这个,但返回错误“长度必须匹配”。

y2020 = [('2020-04-30', '2020-05-30', '2020-06-30', '2020-07-30')]
y2019 = [('2019-04-30', '2019-05-30', '2019-06-30', '2019-07-30')]
y2018 = [('2018-04-30', '2018-05-30', '2018-06-30', '2018-07-30')]
y2017 = [('2017-04-30', '2017-05-30', '2017-06-30', '2017-07-30')]
y2016 = [('2016-04-30', '2016-05-30', '2016-06-30', '2016-07-30')]


for i, j, k, l, m in zip(y2020, y2019, y2018, y2017, y2016):
    df1.loc[df1['Time'] == i, 'AF_ARBETSLOSA'] = df1.loc[df1['Time'].isin([j, k, l, m]), 'AF_ARBETSLOSA'].mean()

我的数据如下所示:

              n
Time    
1994-01-31  636790
1994-02-28  622556
1994-03-31  609128
1994-04-30  588751
1994-05-31  579768

0 个答案:

没有答案