Pandas 使用月平均值按行划分的元素可变性
我有一个称为“df”的df,看起来像这样:Pandas 使用月平均值按行划分的元素可变性,pandas,elementwise-operations,Pandas,Elementwise Operations,我有一个称为“df”的df,看起来像这样: year month adjusted_power 333 2018 10 4 334 2018 11 2 335 2018 12 1 336 2019 01 6 337 2019 02 8 338 2019 03 2 339 2019 04 12 340 2019 05
year month adjusted_power
333 2018 10 4
334 2018 11 2
335 2018 12 1
336 2019 01 6
337 2019 02 8
338 2019 03 2
339 2019 04 12
340 2019 05 10
341 2019 06 6
342 2019 07 2
343 2019 08 2
344 2019 09 4
345 2019 10 4
346 2019 11 8
347 2019 12 10
而且,我需要将它按元素划分为每月平均数数据帧,称为“dfavgs”
因此,就新df“dfvar”=(df/dfavgs)-1的可变性而言,输出看起来是这样的
我不确定如何继续计算循环结构中的元素可变性,使用lamba变量或类似的东西,但它只给出了前12个可变性数字,列的其余部分是NaN:
dfvar = (df.loc[:,'adjusted_power'].div(dfavgs.loc[:,'adjusted_power_average']) - 1)
谢谢你的帮助 试试看
df['new'] = df.adjust_power/dfavgs.set_index('month')['adjusted_power_average'].reindex(df['month']).values
使用映射
:
df['var'] = df['adjusted_power']/df['month'].map(dfavgs.set_index('month')['adjusted_power_average'])
输出:
year month adjusted_power var
333 2018 10 4 0.666667
334 2018 11 2 0.500000
335 2018 12 1 0.250000
336 2019 1 6 3.000000
337 2019 2 8 2.000000
338 2019 3 2 0.333333
339 2019 4 12 1.500000
340 2019 5 10 1.666667
341 2019 6 6 3.000000
342 2019 7 2 0.500000
343 2019 8 2 0.250000
344 2019 9 4 0.500000
345 2019 10 4 0.666667
346 2019 11 8 2.000000
347 2019 12 10 2.500000
为什么
var
第333行的333
是0
?谢谢,我把帖子改成了正确的答案。嗨,谢谢。你能给我解释一下“.reindex”和“.values”的用途吗?谢谢你,我正在努力学习你的好榜样。
df['var'] = df['adjusted_power']/df['month'].map(dfavgs.set_index('month')['adjusted_power_average'])
year month adjusted_power var
333 2018 10 4 0.666667
334 2018 11 2 0.500000
335 2018 12 1 0.250000
336 2019 1 6 3.000000
337 2019 2 8 2.000000
338 2019 3 2 0.333333
339 2019 4 12 1.500000
340 2019 5 10 1.666667
341 2019 6 6 3.000000
342 2019 7 2 0.500000
343 2019 8 2 0.250000
344 2019 9 4 0.500000
345 2019 10 4 0.666667
346 2019 11 8 2.000000
347 2019 12 10 2.500000