我想用来自同一列但来自不同行的值来更新数据框中一列的值。
我尝试了以下代码:
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