每当列中的字符串值更改时,如何拆分数据帧?

背心

我有一个形式的数据框:

         time     value   label
0  2020-01-01 -0.556014    high
1  2020-01-02  0.185451    high
2  2020-01-03 -0.401111  medium
3  2020-01-04  0.436111  medium
4  2020-01-05  0.412933    high
5  2020-01-06  0.636421    high
6  2020-01-07  1.168237    high
7  2020-01-08  1.205073    high
8  2020-01-09  0.798674    high
9  2020-01-10  0.174116    high

我想填充一个数据框列表,当列中的字符串label更改时,将在其中构建每个数据框因此,第一个数据帧将是:

         time     value   label
0  2020-01-01 -0.556014    high
1  2020-01-02  0.185451    high

第二个数据帧将是:

         time     value   label
2  2020-01-03 -0.401111  medium
3  2020-01-04  0.436111  medium

等等。和所需的列表将是[df, df, ...]如果您认为dict将是一个更合适的容器,那么我根本不会介意。

如果列值的序列发生变化有一个类似的帖子叫做split data frame pandas,但是它只能处理数值的变化。我做了一些尝试,但是在将行值label与先前值进行比较时一直遇到索引问题所以任何建议都会很棒!

这是一个可复制的代码段:

# imports
import plotly.express as px
import plotly.graph_objects as go
import pandas as pd
import numpy as np
import random

# settings
observations = 100
np.random.seed(5)
value = np.random.uniform(low=-1, high=1, size=observations).tolist()
time = [t for t in pd.date_range('2020', freq='D', periods=observations).format()]

df=pd.DataFrame({'time': time, 
                 'value':value})
df['value']=df['value'].cumsum()

def classify(e):
    if e > 0.75: return 'high'
    if e > 0.25: return 'medium'
    if e >= 0: return 'low'

df['label1'] = [(elem-df['value'].min())/(df['value'].max()-df['value'].min()) for elem in df['value']]
df['label'] = [classify(elem) for elem in df['label1']]
df = df.drop('label1', 1)
df
鲍加特

我将创建一个列,该列在每次更改时递增,然后按该列分组。如果需要单独的数据框,则可以循环分配它们。

df['group'] = df['label'].ne(df['label'].shift()).cumsum()
df = df.groupby('group')
dfs = []
for name, data in df:
    dfs.append(data)

dfs将是一个数据帧列表,如下所示:

[         time     value label  group
 0  2020-01-01 -0.556014  high      1
 1  2020-01-02  0.185451  high      1,
          time     value   label  group
 2  2020-01-03 -0.401111  medium      2
 3  2020-01-04  0.436111  medium      2,
          time     value label  group
 4  2020-01-05  0.412933  high      3
 5  2020-01-06  0.636421  high      3
 6  2020-01-07  1.168237  high      3
 7  2020-01-08  1.205073  high      3
 8  2020-01-09  0.798674  high      3
 9  2020-01-10  0.174116  high      3]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Pandas Python将字符串拆分为数据帧中的几列?

当Javascript中的值更改时如何拆分字符串

拆分数据帧中与特定列配对的多个列

如何基于列值拆分数据帧,对字符串值进行排序或分组依据?

如何通过列中的字符串名称拆分数据帧并将相应的输出写入文件?

正则表达式将数据帧字符串拆分为python中的列

每当特定列的字符串内容更改时,从0重新开始索引

每当任何列中的值更改时,我将如何替换行颜色?

每当列值更改时,如何使用“ dplyr”创建一个新组?

在R中的数据帧的n列中拆分字符串

根据字符串拆分数据帧

如何在Python中出现所有特定模式的情况下拆分数据帧列中的字符串

通过分组拆分数据帧,如果另一列中的值对于特定字符串不变,则删除该组

将字符串拆分为语音,并为数据帧中的列分配相同口语的语音

根据\拆分数据帧字符串

根据单词拆分数据帧字符串,并将其存储在数据帧列中

在SQL Server字符串中拆分数据

将分隔的字符串拆分为R数据帧中的不同列

字符串中的字符更改时,RegEx拆分/标记字符串

在R中,如何按多个列中的因数拆分/细分数据帧?

在数据帧的列中按字符数拆分字符串,以在R?中创建多个列?

如何在 Python 中的数据帧中按特定字符串长度拆分行?

如何在pyspark中使用pandas_udf拆分数据帧中的字符串

如何拆分数据帧

如何在spark中同时拆分数据帧中的两个映射列

在 R 中,根据拆分字符串中的内容将 1 列数据帧转换/拆分为 4 列

Ruby:从字符串中拆分数据

如何转换列中的字符串列表并通过相同的字符串拆分数据框以具有多个?

在python中拆分数据框中的字符串