搜尋

首頁  >  問答  >  主體

python - 怎么对dataframe中筛选过的数据进行计算

要求:对已生成的一组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。。。 则不报错

PHP中文网PHP中文网2809 天前594

全部回覆(2)我來回復

  • 迷茫

    迷茫2017-04-18 09:49:44

    可以用apply函數對dataframe物件進行橫向或縱向計算
    例如假設對你的c第一列做if,計算最後兩列的商:

    def cal(x):
        if x[0] > 10:  # 对第一列筛选
            return x[-1] / x[-2]
            
    c.apply(cal, axis=1)

    此時就能得到滿足篩選條件的計算結果,是個Series物件

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 09:49:44

    這是Python基礎問題。

    if a['end_date']<= datetime.strptime('2013-12-31','%Y-%m-%d').date()
    

    對一個Series進行向量化計算傳回的仍然是Series,Series是一個np數組,本身不提供一個傳回真值的方法。只有在使用了.any(),.all()之後才可以比較。

    然後認真學習Pandas文件吧。

    回覆
    0
  • 取消回覆