我正在寻找一种方法来分割熊猫数据框架基础上的数字切换从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)]