求教 pandas 相关,最快找到某列中与上一行不同正负号的行,不用 for 应该怎么写? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yellowtail
V2EX    问与答

求教 pandas 相关,最快找到某列中与上一行不同正负号的行,不用 for 应该怎么写?

  •  
  •   yellowtail 2020-09-18 14:14:38 +08:00 1602 次点击
    这是一个创建于 1853 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://imgchr.com/i/wh0yqK

    也就是找到 macd 出现金叉的位置

    12 条回复    2020-09-20 02:10:53 +08:00
    yech1990
        1
    yech1990  
       2020-09-18 14:21:50 +08:00 via Android   4
    大概这样

    df.rolling(window=2).agg(lambda x : x.prod()<0)
    yellowtail
        2
    yellowtail  
    OP
       2020-09-18 15:31:06 +08:00
    没有看懂,但是确实实现了...谢谢大哥!
    yellowtail
        3
    yellowtail  
    OP
       2020-09-18 15:31:38 +08:00
    @yech1990 没有看懂,但是确实实现了...谢谢大哥!
    zxCoder
        4
    zxCoder  
       2020-09-18 15:33:08 +08:00
    @yech1990 好强啊
    imn1
        5
    imn1  
       2020-09-18 15:55:59 +08:00
    凡是有序的列(主要指 index 有序),值有前后相关的,用 rolling/window 函数就对了
    yellowtail
        6
    yellowtail  
    OP
       2020-09-18 16:05:42 +08:00
    @imn1 反正这一套 rolling 后接 agg 加 lambda prod 的操作看得我高山仰止 钦佩之情滔滔不绝...
    clf
        7
    clf  
       2020-09-18 16:20:44 +08:00
    对 1 楼大佬写的语句的简单解析:

    df.rolling(window=2).agg(lambda x : x.prod()<0)

    df.rolling(window=2) :window 是计算统计量的观测值的数量,这里是当前量和前一个数值(上一行)。

    x.prod() 返回乘积,相当于当前行乘以上一行,小于 0 表示符号不一样。

    .agg(lambda x : x.prod()<0) 对传入的数值按 lambda 表达式进行计算。
    imn1
        8
    imn1  
       2020-09-18 16:29:30 +08:00
    @yellowtail #6
    我是觉得奇怪,macd 就是证券计算,那基本上都离不开移动函数,应该都会呀,不然你是怎么算移动平均的?
    yellowtail
        9
    yellowtail  
    OP
       2020-09-18 16:46:32 +08:00
    @imn1 网上看到的都是 rolling 加 sum 和 mean... 我有样学样抄的 知其然不知其所以然的差距啊
    kifile
        10
    kifile  
       2020-09-18 17:19:15 +08:00   1
    x[(x*x.shift(1)) < 0]
    yellowtail
        11
    yellowtail  
    OP
       2020-09-19 19:57:30 +08:00
    @yech1990 再追问个问题,用 resample 处理 k 线合并(比如一分钟数据的 k 线,按 5 分周期取样,得到 5 分钟 k 线),但是 60 分钟以上的失败了,可能是因为中午休市时间的干扰,想问一下:有没有类似 rolling 的函数可以一段一段切分 df 的,比如窗口是 5,第一段就是 0-4,第二段是 5-9 这样的 谢谢!
    yech1990
        12
    yech1990  
       2020-09-20 02:10:53 +08:00 via Android   1
    不是很清楚“但是 60 分钟以上的失败了”是什么意思。如果 resample 函数不行,你可以试试用 pd.cut 函数
    关于     帮助文档     自助推广系统     博客     API nbsp;   FAQ     Solana     4602 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 04:02 PVG 12:02 LAX 21:02 JFK 00:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86