Pandas将数据帧的各个部分分成多个数据帧

2024-10-01 02:31:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含3000多行的Pandas数据帧,如下所示:

    t090:   c0S/m:    pr:      timeJ:  potemp090C:   sal00:  depSM:  \
407  19.3574  4.16649  1.836  189.617454      19.3571  30.3949   1.824
408  19.3519  4.47521  1.381  189.617512      19.3517  32.9250   1.372
409  19.3712  4.44736  0.710  189.617569      19.3711  32.6810   0.705
410  19.3602  4.26486  0.264  189.617627      19.3602  31.1949   0.262
411  19.3616  3.55025  0.084  189.617685      19.3616  25.4410   0.083
412  19.2559  0.13710  0.071  189.617743      19.2559   0.7783   0.071
413  19.2092  0.03000  0.068  189.617801      19.2092   0.1630   0.068
414  19.4396  0.00522  0.068  189.617859      19.4396   0.0321   0.068

我要做的是:从数据帧的每个部分创建单独的数据帧,其中列'c0S/m'中的值超过0.1(例如上面示例中的第407-412行)。在

假设我在3000+行的数据帧中有7个部分,其中第二列的一系列行超过0.1。我的if/for/while语句将切片这些部分并创建7个单独的数据帧。在

我尽我所能去研究,但找不到一个能解决这个问题的问题。感谢任何帮助。在

谢谢。在


Tags: 数据示例pandasforif切片pr语句
2条回答

还有另一种方法。在

sub_set = df[df['c0S/m'] > 0.1]

last = None

for i in sub_set.index:
    if last is None:
        start = i
    else:
         if i - last > 1:
            print start, last
            start = i
    last = i

我认为它有效。(您可以插入代码来创建所需的原始数据帧切片,而不是print start, last)。在

一些巧妙的技巧可以做得更好。在

你可以试试这个:

首先根据值是否大于1或小于1添加一列0或1。在

df['splitter'] = np.where(df['c0S/m:'] > 1, 1, 0)

现在按此列分组积温差()

^{pr2}$

你得到了所需的索引块

splitter
1    [407, 411]
2    [412, 414]
3    [415, 415]

现在可以使用loc创建数据帧

df.loc[407:411]

注:我在示例数据框中添加了一行:

df.loc[415] = [19.01, 5.005, 0.09, 189.62, 19.01, 0.026, 0.09] 

为了能够更好地测试,因此将其分成3组

相关问题 更多 >