吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 864|回复: 7
收起左侧

[求助] pandas数据分析出错

[复制链接]
lizy169 发表于 2021-11-22 21:19
请师兄师姐各路大神帮我看看,我下面哪里出了问题,应该怎么搞?

源数据:

价格        数量
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['价格'] > data['价格'].shift(1), 'new1'] = '上升'  # 如果价格大于上一位价格,new1显示上升;
data.loc[data['价格'] < data['价格'].shift(1), 'new1'] = '下降'  # 如果价格小于上一位价格,new1显示下降;
data.loc[data['价格'] == 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
第一步得出来的结果在连续=的时候是空值,我希望的是继续等于上面的结果。
1.png
第二步直接报错:
    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 ...

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

谢谢!!
lbbas 发表于 2021-11-22 22:36
本帖最后由 lbbas 于 2021-11-22 22:57 编辑

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

免费评分

参与人数 1热心值 +1 收起 理由
lizy169 + 1 谢谢@Thanks!

查看全部评分

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吾爱币 +1 收起 理由
lizy169 + 1 谢谢@Thanks!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 19:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表