python - 将数据分成连续的组

标签 python pandas dataframe pandas-groupby

我对编码还很陌生,所以请耐心等待。我有一个 pandas df ,它具有连续的正值或负值序列或 0。

    df = 
    x    y
0   -5   25
1   -7   32
2   -3   33
3    0   22
4    1   16
5    6   10
6    3   36
7    0   22
8    0   55
9   -10  24
10  -9   32 
11  -8   5
12  11   4
13  17   9
14  13   88
15   0   14
16   0   12
17   0   0
18   0   10
19   0   96
20  -1   492
21  -9   -440
22  -3   34

我想像这样分解这些数据:

data1 = [-5 -7 -3 0]
data2 = [1 6 3 0 0]
data3 = [-10 -9 -8]
data4 = [11 17 13 0 0 0 0 0]
data5 = [-1 -9 -3]

其中值 0 或任意数量的 0 与其前面的值一起放入仅负数或正数的集合中。

任何正确方向的帮助或指示将不胜感激。

最佳答案

我把它当作pandas Series

#A=pd.Series(lst)
idx=A.index
A=A.loc[A!=0].to_frame('Val')
A['Group']=A.ge(0).astype(int).diff().ne(0).cumsum()
A=A.reindex(idx)
A.Val=A.Val.fillna(0).astype(int)
A.Group=A.Group.ffill()
A.groupby('Group').Val.apply(list).tolist()


[[-5, -7, -3, 0],
 [1, 6, 3, 0, 0],
 [-10, -9, -8],
 [11, 17, 13, 0, 0, 0, 0, 0],
 [-1, -9, -3]]

关于数据框A

A
Out[23]: 
    Val  Group
0    -5    1.0
1    -7    1.0
2    -3    1.0
3     0    1.0
4     1    2.0
5     6    2.0
6     3    2.0
7     0    2.0
8     0    2.0
9   -10    3.0
10   -9    3.0
11   -8    3.0
12   11    4.0
13   17    4.0
14   13    4.0
15    0    4.0
16    0    4.0
17    0    4.0
18    0    4.0
19    0    4.0
20   -1    5.0
21   -9    5.0
22   -3    5.0

关于python - 将数据分成连续的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50274268/

相关文章:

python-3.x - pandas如何检查列中的值是否连续

python - 将参数传递给 Pandas GroupBy `agg()` 中的函数列表

java - JSON:Python 输出文件到 Java ObjectMapper - 大小错误

python - 使用python导入带有 Pandas 的excel

python - 如何从数据框中的所有列名称/标题中删除数字

python - 旋转数据框以自动创建列

python - 从字符串转换为 pandas 数据框

python - 使用棋盘图案对 Pandas DataFrame 进行切片

Python脚本给出 `: No such file or directory`

python - 如何使用另一个 numpy 数组修改 pandas 数据框中的所有值