如何根据号码切换拆分Pandas框架



我正在寻找一种方法来分割熊猫数据框架基础上的数字切换从4.2到4.19在一列

我不能使用diff()方法,因为当数据从4.19变为4.18时,在diff列中也会出现差异(0.01)。此外,基于特定数字(例如4.2或4.19)进行拆分不能工作,因为列中有这些数字的倍数(例如4.2看起来像5倍)。

数据如下

4.19994.19994.24.19994.19754.24.194.19314.1924.19114.19024.18964.1894.1883

当使用pandas或任何其他python方法从4.2更改为4.19时,是否有方法拆分此类数据框?

提前谢谢你。

真诚

Cindino

使用shift来构造带有分割点的遮罩:

split_points = df.column.eq(4.2) & df.column.shift(-1).eq(4.19)

或:

split_points = df.column.shift(1).eq(4.2) & df.column.eq(4.19)

取决于你想在哪里进行分割

使用示例:

df = pd.DataFrame({'col': [4.1999,4.1999,4.2,4.1999,4.1975,4.2,4.19,4.1931,4.192,4.1911,4.1902,4.1896,4.189,4.1883]})
df['split'] = df['col'].shift(1).eq(4.2) & df['col'].eq(4.19)
df['group'] = df['split'].cumsum()
df

输出:

col  split  group
0   4.1999  False      0
1   4.1999  False      0
2   4.2000  False      0
3   4.1999  False      0
4   4.1975  False      0
5   4.2000  False      0
6   4.1900   True      1
7   4.1931  False      1
8   4.1920  False      1
9   4.1911  False      1
10  4.1902  False      1
11  4.1896  False      1
12  4.1890  False      1
13  4.1883  False      1

你可以使用groupby:

访问子帧
list(df.groupby('group'))
[(0,
col  split  group
0  4.1999  False      0
1  4.1999  False      0
2  4.2000  False      0
3  4.1999  False      0
4  4.1975  False      0
5  4.2000  False      0),
(1,
col  split  group
6   4.1900   True      1
7   4.1931  False      1
8   4.1920  False      1
9   4.1911  False      1
10  4.1902  False      1
11  4.1896  False      1
12  4.1890  False      1
13  4.1883  False      1)]

或直接:

list(df.groupby((df['col'].shift(1).eq(4.2) & df['col'].eq(4.19)).cumsum()))

输出:

[(0,
col
0  4.1999
1  4.1999
2  4.2000
3  4.1999
4  4.1975
5  4.2000),
(1,
col
6   4.1900
7   4.1931
8   4.1920
9   4.1911
10  4.1902
11  4.1896
12  4.1890
13  4.1883)]

相关内容

  • 没有找到相关文章

最新更新