我有一个类似于
value identifier
EA 2007-01-01 0.33 55
2007-01-01 0.73 56
2007-01-01 0.51 57
2007-02-01 0.13 55
2007-02-01 0.23 57
2007-03-01 0.82 55
2007-03-01 0.88 56
2007-03-01 0.19 57
2008-01-01 0.36 55
2008-01-01 0.26 57
2008-02-01 0.17 55
2008-02-01 0.17 56
2008-02-01 0.57 57
2008-03-01 0.75 55
2008-03-01 0.45 56
EB 2007-01-01 0.13 55
2007-01-01 0.74 56
2007-01-01 0.56 57
2007-02-01 0.93 55
2007-02-01 0.23 57
2007-03-01 0.82 55
2007-03-01 0.38 56
2007-03-01 0.19 57
2008-01-01 0.46 55
2008-01-01 0.26 57
2008-02-01 0.67 55
2008-02-01 0.98 56
2008-02-01 0.11 57
2008-03-01 0.75 55
2008-03-01 0.22 56
还有一个有价值观的口述
^{pr2}$我试着把所有值乘以权重。第一个显而易见的方法是
for key, weight in weigths.items():
df[key]['value'] = df[key]['value'] * weight
但这给了我们一个警告:
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
所以我改成这样:
for key, weight in weigths.items():
df.loc[key,'value'] = df.loc[key,'value'] * weight
但是它找不到列value
。此表单有效,但它给出了相同的警告:
for key, weight in weigths.items():
df.loc[key]['value'] = df.loc[key]['value'] * weight
基于documentation,我理解了此警告可能与之相关的原因,但是如何将这些值相乘呢?在
要消除不言自明的警告,请执行以下操作:
熊猫版本(0.16)没有看到任何警告:
^{pr2}$此外,还可以将数据帧与标量值相乘,如下所示:
这不是你马上要问的问题,但我会用一种不同的方法来处理这个问题,它应该运行得更快:
我假设EA/EB在一个名为“index”的列中,因此您可能需要在执行此操作之前重置_index。在
从那里开始,这只是正则乘法。在
^{pr2}$相关问题 更多 >
编程相关推荐