lizy169 发表于 2021-11-22 21:19

pandas数据分析出错

请师兄师姐各路大神帮我看看,我下面哪里出了问题,应该怎么搞?

源数据:

价格        数量
3.5        20
3.6        25
5.2        18
5.2        7
5.2        6
4.5        9
4.5        25
4.5        12
4.3        37
4.8        15
       

代码:
import pandas as pd

data = pd.read_csv('D:/new.csv', parse_dates=[0], encoding='gbk')# 读取数据
data['new1'] = ''# 新增列“new1”,并赋空值

# 第一步
data.loc'价格'] > data['价格'].shift(1), 'new1'] = '上升'# 如果价格大于上一位价格,new1显示上升;
data.loc'价格'] < data['价格'].shift(1), 'new1'] = '下降'# 如果价格小于上一位价格,new1显示下降;
data.loc'价格'] == data['价格'].shift(1), 'new1'] = data['new1'].shift(1)
# 如果价格等于上一位价格,new1等于上一位new1

# 第二步
data['new2'] = ''# 新增列“new2”,并赋空值
if data['new1'] == '上升':# 如果new1=“上升”,new2就等于数量;
    data['new2'] = data['数量']
else:
    data['new2'] = -data['数量']# 否则等于(-数量)
print(data)

bin_chb 发表于 2021-11-22 22:21

第一步能运行,只说第二步
data['new2']=data['new2'].mask(data['new1']=='上升',data['数量'])
data['new2']=data['new2'].mask(data['new1']=='下降',-data['数量'])

lizy169 发表于 2021-11-22 22:25

第一步得出来的结果在连续=的时候是空值,我希望的是继续等于上面的结果。

第二步直接报错:
    raise ValueError(
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

lizy169 发表于 2021-11-22 22:31

bin_chb 发表于 2021-11-22 22:21
第一步能运行,只说第二步
data['new2']=data['new2'].mask(data['new1']=='上升',data['数量'])
data['n ...

谢谢你,第二步完美解决,第一步在连续=的时候,会出现空值
我希望空值还是等于上面的结果,这个能帮我吗?

谢谢!!{:1_893:}{:1_893:}{:1_893:}

lbbas 发表于 2021-11-22 22:36

本帖最后由 lbbas 于 2021-11-22 22:57 编辑

首先也是一个pandas初学者,刚查了下文档啥的,给出我的一些意见,不一定准确哈。
1.data['new1'] = data['价格'].diff(1).apply(lambda x: '上升' if x > 0 else('下降' if x<0else None))
data.fillna(method='ffill') 不知道你写的代码问题出在哪里,但是这个好像能解决你的问题。不过第一个值你需要考虑下。
2.data['new2'] = data.apply(lambda x: x['数量'] if x['new1']== '上升' else -x["数量"],axis=1) 你写的data['new1']是一个series,是不能这样比较的。

bin_chb 发表于 2021-11-22 22:59

lizy169 发表于 2021-11-22 22:31
谢谢你,第二步完美解决,第一步在连续=的时候,会出现空值
我希望空值还是等于上面的结果,这个能帮我 ...

啥意思?data['new2']=data['new2'].mask(data['new1']=='',data['new2'].shift(1))这样??

lizy169 发表于 2021-11-22 23:16

bin_chb 发表于 2021-11-22 22:59
啥意思?data['new2']=data['new2'].mask(data['new1']=='',data['new2'].shift(1))这样??

对,你告诉我第二步的方法,把第二步的问题解决了,这个问题我开始搞了好几天,都没搞明白,谢谢你了。
第一步的问题,我现在还没搞清楚

bin_chb 发表于 2021-11-22 23:27

lizy169 发表于 2021-11-22 23:16
对,你告诉我第二步的方法,把第二步的问题解决了,这个问题我开始搞了好几天,都没搞明白,谢谢你了。
...

第一步你考虑的不周全,相等写错了,这种直接增加一列data['价格pre']=data['价格'].shift(1),逻辑上会清楚一点,然后你直接比较两列大小就好了
页: [1]
查看完整版本: pandas数据分析出错