python - 将相同的连续值分组到 pandas 中并存储 : values, 索引和列切片

标签 python pandas

我有一个数据框

import pandas as pd
import numpy as np
v1=list(np.random.rand(30))
v2=list(np.random.rand(30))
mydf=pd.DataFrame(data=zip(v1,v2),columns=['var1','var2'])

然后我对一些变量应用一些 bool 条件

mydf['cond1']=mydf['var1']>0.2
mydf['cond2']=mydf['var1']>0.8


mydf['cond1']=
0 False
1 True
2 True
3 False
4 False
5 True
6 False
....

我想对“cond1”(或“cond2”)为 True 的 block 进行分组,并且对于每个组存储:

  • 组的值:True/False

  • block 的开头和结尾的索引:例如 1,2 5,5

  • 开始索引和结束索引处的 var2 的 2 个值,

  • 开始索引和结束索引之间的所有 var1 值,作为可迭代(np.array 列表)

这是返回值的一个示例:

summary=
'Start' 'End' 'Start_var2' 'End_var2' 'Value' 'var1'
 1        2    0.3217381    0.454543   True    [0.25,0.26]

最佳答案

IIUC,让我们尝试这样的事情:

mydf.groupby(mydf.cond1.diff().cumsum(), as_index=False)\
    .apply(lambda x: pd.Series([x.iloc[0].name,
                                x.iloc[-1].name, 
                                x.iloc[0]['var2'], 
                                x.iloc[-1]['var2'], 
                                x.iloc[0]['cond1'], 
                                x.var1.tolist()],
                                index=['Start','End','Start_var2',
                                       'End_var2','Value','var1']))

输出:

   Start  End  Start_var2  End_var2  Value                                               var1
0      1   13    0.580713  0.772878   True  [0.9080110836630401, 0.34879731608699105, 0.63...
1     14   14    0.688374  0.688374  False                              [0.11739843719148924]
2     15   15    0.204304  0.204304   True                               [0.3010533582011998]
3     16   17    0.470689  0.808964  False         [0.14526373397045378, 0.09218609736837002]
4     18   20    0.675035  0.087408   True  [0.6029321967069232, 0.3641874497564469, 0.564...
5     21   21    0.346795  0.346795  False                               [0.1913357207205566]
6     22   29    0.944366  0.845753   True  [0.6769058596527606, 0.2155054472756598, 0.278...

关于python - 将相同的连续值分组到 pandas 中并存储 : values, 索引和列切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48445748/

相关文章:

python - 获取行和列 pandas bool 数据框

python 函数的默认值参数会针对列表进行缓存,但不会针对其他类型进行缓存

python - 如何在Python中创建一个矩形矩阵?

java - 本地主机上的 GAE 多模块、多语言应用程序

python - 将日期时间索引透视到开始列和结束列

python - 颜色编码或标记 Pandas 数据框的散点图?

python - 如何在训练有素的网络上实现 Grad-CAM

python - 如何告诉pbr在包中包含非代码文件

python - 根据部分匹配组合两个 pandas df

python - 将带有 NaN 的 Json 读入 Python 和 Pandas