按值域将数据框拆分为较小的数据框。

4

我有以下数据框:

     x     text     
1    500   aa
2    550   bb
3    700   cc
4    750   dd 

我的目标是在x值相差100个点以上时拆分这个数据框。

是否有一种pandas函数可以根据数值范围进行拆分?

这是我期望的输出:

df_1:

    x     text  
0   500   aa
1   550   bb

df_2:

    x     text  
0   700   cc
1   750   dd

你的范围是动态的还是始终相隔100?具体来说,[400, 450, 500, 550]应该在同一个数据框中吗? - Rocky Li
@RockyLi 动态 - Sam
@RockyLi 是的,没错。 - Sam
2个回答

3

我相信你需要通过辅助程序 Seriesgroupby 对象转换为元组和字典:

d = dict(tuple(df.groupby(df['x'].diff().gt(100).cumsum())))
print (d)
{0:      x text
1  500   aa
2  550   bb, 1:      x text
3  700   cc
4  750   dd}

细节

首先使用 Series.diff 得到差异,再使用 Series.gt 比较大小并通过 Series.cumsum 创建连续组:

print (df['x'].diff().gt(100).cumsum())
1    0
2    0
3    1
4    1
Name: x, dtype: int32

如何处理介于-130到130之间的范围?换句话说,任何大于130或小于-130的数值。 - Sam
@Sam - 没有测试过,但是如何将 df['x'].diff().gt(100).cumsum() 更改为 df['x'].diff().abs().gt(130).cumsum() - jezrael
@Sam - 你认为通过 df[df['x'].between(-130, 130)] 进行过滤怎么样? - jezrael

0
创建一个新列,使用shift(1)函数,然后按照这些列的值之间的差异进行分离。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接