【发布时间】:2019-03-31 22:26:42
【问题描述】:
我有以下数据框
print(df1)
Date start end delta d1 x_s y_s z_s x_f y_f z_f
0 09/01/2017 09/01/2017 06/02/2017 28 28 0.989 0.945 0.626 0.191 0.932 0.280
1 10/01/2017 09/01/2017 06/02/2017 27 28 0.989 0.945 0.626 0.191 0.932 0.280
2 11/01/2017 09/01/2017 06/02/2017 26 28 0.989 0.945 0.626 0.191 0.932 0.280
3 12/01/2017 09/01/2017 06/02/2017 25 28 0.989 0.945 0.626 0.191 0.932 0.280
4 13/01/2017 09/01/2017 06/02/2017 24 28 0.989 0.945 0.626 0.191 0.932 0.280
5 14/01/2017 09/01/2017 06/02/2017 23 28 0.989 0.945 0.626 0.191 0.932 0.280
6 15/01/2017 09/01/2017 06/02/2017 22 28 0.989 0.945 0.626 0.191 0.932 0.280
7 16/01/2017 09/01/2017 06/02/2017 21 28 0.989 0.945 0.626 0.191 0.932 0.280
8 17/01/2017 09/01/2017 06/02/2017 20 28 0.989 0.945 0.626 0.191 0.932 0.280
9 18/01/2017 09/01/2017 06/02/2017 19 28 0.989 0.945 0.626 0.191 0.932 0.280
df1['delta'] = df1['end'] - df1['Date'] 和 df1['d1'] = df['end']-df1['start']
我想创建 3 个新列,其中显示对 (x_s, x_f)、(y_s, y_f) 和 (z_s, z_f) 之间的插值。
我试过下面的代码
def mapper (name):
return name+'_i'
ss = list(df1[['x_s', 'y_s', 'z_s']])
fs = list(df1[['x_f', 'y_f', 'z_f' ]])
df2 = pd.DataFrame
for s in ss :
for f in fs:
df2[s] = df1[s] + (((df1[f] - df1[s])/df1['d1'])*df1['delta'])
df_conc = pd.concat((df1, df2_new), axis=1)
但是,当我尝试运行嵌套循环时,出现以下错误:
TypeError: 'type' object does not support item assignment
我想知道我做错了什么。我将不胜感激任何提示或建议。提前非常感谢!
第二次尝试:
ss = ('x', 'y', 'z')
for s in ss:
df1[mapper(s)] = pd.Series((df1[s+'_s'] + ((df1[s+'_f'] - df1[s+'_s'])/(df1['d1']))*df1['delta']), name=mapper(s), index=df1.index)
但我仍然没有得到 3 个新列,它们循环通过以下对 (x_s, x_f)、(y_s, y_f)、(z_s, z_f)。
如果您发现我做错了什么,请告诉我,非常感谢!
【问题讨论】:
标签: python pandas for-loop dataframe nested-loops