修复以下错误:ValueError:不能设置使用不同长度的多索引选择索引器



我想用来自同一列但来自不同行的值来更新数据框中一列的值。

我尝试了以下代码:

m = (dfc['year'] == 2015) & (dfc['max'] < 5.0)
n= dfc['Full_date'] == '28-8-2015'
dfc.loc[m, ['max']] = dfc.loc[n, ['max']].values

但是它返回了标题的错误。

我正在工作的数据帧是这样的:

min max Full_date   year    month   day
date                        
2015-08-03  3.89    4.80    3-8-2015    2015    8   3
2015-08-04  3.89    9.50    4-8-2015    2015    8   4
2015-08-05  3.89    6.50    5-8-2015    2015    8   5
2015-08-06  3.89    5.50    28-8-2015   2015    8   6

代码执行后的预期输出将是:

min max Full_date   year    month   day
date                        
2015-08-03  3.89    5.50    3-8-2015    2015    8   3
2015-08-04  3.89    9.50    4-8-2015    2015    8   4
2015-08-05  3.89    6.50    5-8-2015    2015    8   5
2015-08-06  3.89    5.50    28-8-2015   2015    8   6

我怎么解决它?

问题是您将替换值视为矢量,而它是标量. (如果它确实是一个向量,则需要定义如何映射值)

你可以使用:

# get replacement value
# here FIRST "max" value matching 28-8-2015 "Full_date"
val = dfc.loc[df['Full_date'].eq('28-8-2015').idxmax(), 'max']
# slice and replace
m = dfc['year'].eq(2015) & dfc['max'].lt(5)
dfc.loc[m, 'max'] = val

输出:

min  max  Full_date  year  month  day
date                                              
2015-08-03  3.89  5.5   3-8-2015  2015      8    3
2015-08-04  3.89  9.5   4-8-2015  2015      8    4
2015-08-05  3.89  6.5   5-8-2015  2015      8    5
2015-08-06  3.89  5.5  28-8-2015  2015      8    6

最新更新