Maison > Questions et réponses > le corps du texte
要求:对已生成的一组dataframe数据列,需要根据日期做条件判断,对不同日期范围的数据,以不同的规则进行数据类运算,运算结果添加至一个新的列。
...
a=pd.DataFrame(data1,columns=['end_date','province','price']) #数组a
b=pd.DataFrame(data2,columns=['province','index_2013','index_2014','index_2015','index_2016'])#数据b
c=pd.merge(a,b,on='province') #以province进行连接
if a['end_date']<= datetime.strptime('2013-12-31','%Y-%m-%d').date(): #判断日期小于13年
c['axp']=c['price']c['index_2013'] #数据c添加列,数据值=priceindex_2013
print c
对if语句行报错,报错如下:ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
在报错行,条件后添加.any()或者.all()则报错消失,但得到的数据不是想要的结果如:if a['end_date'].any()<= datetime。。。 则不报错
迷茫2017-04-18 09:49:44
Vous pouvez utiliser la fonction apply
pour effectuer des calculs horizontaux ou verticaux sur l'objet dataframe
Par exemple, supposons que vous fassiez un if sur la première colonne de votre c et calculiez le quotient des deux dernières colonnes :
def cal(x):
if x[0] > 10: # 对第一列筛选
return x[-1] / x[-2]
c.apply(cal, axis=1)
À ce stade, vous pouvez obtenir le résultat du calcul qui satisfait aux conditions de filtrage, qui est un objet Série
PHP中文网2017-04-18 09:49:44
Il s'agit d'une question de base sur Python.
if a['end_date']<= datetime.strptime('2013-12-31','%Y-%m-%d').date()
Le calcul vectoriel d'une série renvoie toujours la série. La série est un tableau np et ne fournit pas de méthode pour renvoyer une valeur vraie. La comparaison n'est possible qu'après avoir utilisé .any()
, .all()
.
Ensuite, étudiez attentivement la documentation Pandas.