给定df
df = pd.DataFrame([[1,5,2,8,2],[2,4,20,[3,3,1,[4,3],[5,-5,-4],[1,-20],-8],-1,-1],12],-2]],columns=['A','B','C','D','E'],index=[1,6,7,9,10])

基于this answer,我创建了一个计算条纹(向上,向下)的函数.

def streaks(df,column):
    #Create sign column
    df['sign'] = 0
    df.loc[df[column] > 0,'sign'] = 1
    df.loc[df[column] < 0,'sign'] = 0
    # Downstreak
    df['d_streak2'] = (df['sign'] == 0).cumsum()
    df['cumsum'] = np.nan
    df.loc[df['sign'] == 1,'cumsum'] = df['d_streak2']
    df['cumsum'] = df['cumsum'].fillna(method='ffill')
    df['cumsum'] = df['cumsum'].fillna(0)
    df['d_streak'] = df['d_streak2'] - df['cumsum']
    df.drop(['d_streak2','cumsum'],axis=1,inplace=True)
    # Upstreak
    df['u_streak2'] = (df['sign'] == 1).cumsum()
    df['cumsum'] = np.nan
    df.loc[df['sign'] == 0,'cumsum'] = df['u_streak2']
    df['cumsum'] = df['cumsum'].fillna(method='ffill')
    df['cumsum'] = df['cumsum'].fillna(0)
    df['u_streak'] = df['u_streak2'] - df['cumsum']
    df.drop(['u_streak2',inplace=True)
    del df['sign']
    return df

功能很好,但很长.我确信写这个有更好的方法.我尝试了另一个答案,但效果不佳.

这是所需的输出

streaks(df,'E')


    A   B   C    D     E    d_streak    u_streak
1   1   5   2    8     2         0.0    1.0
2   2   4   4   20     2         0.0    2.0
3   3   3   1   20     2         0.0    3.0
4   4   2   2    1     3         0.0    4.0
5   5   1   4   -5    -4         1.0    0.0
6   1   5   2    2   -20         2.0    0.0
7   2   4   4    3    -8         3.0    0.0
8   3   3   1   -1    -1         4.0    0.0
9   4   2   2    0    12         0.0    1.0
10  5   1   4   20    -2         1.0    0.0

解决方法

您可以简化功能,如下所示:
def streaks(df,col):
    sign = np.sign(df[col])
    s = sign.groupby((sign!=sign.shift()).cumsum()).cumsum()
    return df.assign(u_streak=s.where(s>0,0.0),d_streak=s.where(s<0,0.0).abs())

使用它:

streaks(df,'E')

首先,使用np.sign计算所考虑的列中存在的每个单元的符号.这些将1分配给正数,将-1分配给负数.

接下来,使用sign!= sign.shift()来识别相邻值的集合(比较当前单元格和它的下一个)并获取它将在分组过程中使用的累积和.

执行groupby,将这些作为键/条件,并再次获取子组元素的累积和.

最后,将正计算的cumsum值分配给ustreak,将负的值(取其模数后的绝对值)分配给dstreak.

Pythonic计算pandas数据帧条纹的方法的更多相关文章

  1. iWatch报错: Fail to code sign "***" No valid signing identities (i.e. certificate and private key pair

    此错误是证书和开发者账号不匹配.一般出现在我们运行其他人的项目时.所以要检查所以需要开发者账号生产的证书,用自己的账号重新生成一下.比如:如果别人的项目中使用了Healthkit.你直接运行的时候就会报这个错误,因为要Healthkit需要开发者账号生产对应的证书.所以我们运行的时候要使用自己的开发者账号重新生成认证证书.详细可参考这篇博客:http://blog.csdn.net/soindy/

  2. swift 移动支付之【支付宝支付】详细步骤

    二.准备工作支付宝开放平台1.向支付宝签约这一步因为涉及到营业执照之类,一般有公司完成,在此不赘述了。支付宝目前只支持采用RSA加密方式做签名验证。具体到支付宝使用RSA做签名验证,就是在生产订单时,需要使用私钥生成签名值;在处理返回的支付结果时,需要使用公钥验证返回结果是否被篡改了。

  3. swift 移动支付之【微信支付】开发步骤

    //向微信注册WXApi.registerapp2.发送预支付数据预支付数据由后台返回,格式如下[plain]viewplaincopyprint?{"appid":"wxxxxxxxxxxx","noncestr":"Hk8dsZoMOdTXGjkJ","package":"Sign=WXPay","partnerid":"01001010110","prepayid":"wx2016050000000000000000000000","sign":"B4879FFFA8B65522A04034E2D0

  4. Android – GoogleSignInResult总是失败

    类似的问题here,但我添加了json文件.解决方法问题是我从AndroidStudio运行应用程序,因此该应用程序未使用我的证书进行签名,而Google登录需要该证书.

  5. android – 如何检查用户是否已登录Google?

    我正在写一个需要用户登录的应用程序.我想通过Google实现,并按照以下文章设置我的登录活动LoginActivity:>GettingStartedwiththeGoogle+PlatformforAndroid>Google+Sign-inforAndroid流程:>用户打开我的应用程序–MainActivity>它检查用户是否已登录>如果用户尚未登录,则会将用户重定向到LoginActivi

  6. android – GoogleSignInAccount getPhotoUrl()返回null

    尝试从登录的配置文件中获取照片.但总是返回null.名称和电子邮件返回值,只有照片才有麻烦.为什么会这样发生?

  7. Pandas如何将表格的前几行生成html实战案例

    这篇文章主要介绍了Pandas如何将表格的前几行生成html实战案例,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

  8. pandas如何计算同比环比增长

    这篇文章主要介绍了pandas如何计算同比环比增长,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  9. python sklearn与pandas实现缺失值数据预处理流程详解

    对于缺失值的处理,主要配合使用sklearn.impute中的SimpleImputer类、pandas、numpy。其中由于pandas对于数据探索、分析和探查的支持较为良好,因此围绕pandas的缺失值处理较为常用

  10. Python使用pandas将表格数据进行处理

    这篇文章主要介绍了Python使用pandas将表格数据进行处理,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部