python-3.x - 基于趋势值的数据操纵

标签 python-3.x data-mining data-science data-manipulation

给定一个包含“日期”列和“值”列的数据集,我需要提出根据“值”列中的趋势按日期对数据进行分段的最佳解决方案。我的输出应该是一个 CSV 文件,其中包含以下列:StartDate、EndDate、StartValue、EndValue。开始和结束日期定义段的边界。 提供了一个简短的示例:输入数据:

 **Date**        **Value**
  01/01/2014        10
  01/02/2014        5
  01/03/2014        5
  01/04/2014        0

输出:

 **StartDate**   **EndDate**   **StartValue**   **EndValue**
   01/01/2014      01/15/2014        10              5
   01/16/2014      02/03/2014         5              5
   02/04/2014      03/10/2014         5              4

最佳答案

使用 pandas.DataFrame.shift 的方法 ( docs )。

首先,我将创建一个包含一些数据的数据框:

import pandas as pd
datelist = pd.date_range('1/1/2019', periods=100).tolist()
values = np.random.randint(1, 5, 100)
df = pd.DataFrame({'Date': datelist, 'Value': values})
df = df.set_index('Date')
df.head(10)

Date        Value
2019-01-01  1
2019-01-02  4
2019-01-03  2
2019-01-04  2
2019-01-05  2
2019-01-06  3
2019-01-07  2
2019-01-08  2
2019-01-09  3
2019-01-10  2

删除连续重复的行:

df = df.loc[df.Value.shift() != df.Value]

Date        Value
2019-01-01  2
2019-01-02  1
2019-01-04  2
2019-01-05  3
2019-01-06  1

重置索引(如果Date列是原始数据中的索引):

df = df.reset_index()

将现有列重命名为起始列。

df.columns = ['Start_Date', 'Start_Value']

通过将起始列向后移动一行来创建结束列。

df['End_Date'] = df.Start_Date.shift(-1)
df['End_Value'] = df.Start_Value.shift(-1)

删除 NaN(由于 shift(-1) 导致数据帧的最后一行。

df = df.dropna()

End_Value 类型设置为 int(如果首选)。

df['End_Value'] = df['End_Value'].astype(int)
df.head(10)

    Start_Date  Start_Value End_Date    End_Value
0   2019-01-01  1           2019-01-02  4
1   2019-01-02  4           2019-01-03  2
2   2019-01-03  2           2019-01-06  3
3   2019-01-06  3           2019-01-07  2
4   2019-01-07  2           2019-01-09  3
5   2019-01-09  3           2019-01-10  2
6   2019-01-10  2           2019-01-11  1
7   2019-01-11  1           2019-01-12  2
8   2019-01-12  2           2019-01-15  1
9   2019-01-15  1           2019-01-16  4

从数据帧创建 CSV 文件:

df.to_csv('trends.csv')

关于python-3.x - 基于趋势值的数据操纵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53290909/

相关文章:

machine-learning - 关联规则挖掘中的最大模式与封闭模式

python - 如何按职位过滤数据集?

python-3.x - Python Selenium 错误 - 在 (207.1666717529297,25) 处不可点击,因为另一个元素 <div id ="overley"class ="over_ley"> 遮挡了它

python - 在 Python 3 中使用 Pexpect

regex - 限制scrapy抓取子域

machine-learning - Weka 中的分类器选项呈灰色

data-mining - 如何使用 java 将文本文件中的实例添加到 arff 文件

python - 有人有办法标记一个段落,将每个句子放入 pandas 数据框架中,并对每个句子进行情感分析吗?

python - 在dynet中,我可以将模型保存在压缩文件中吗?

python - 创建并运行 python 文件