每个日期按类别对数据进行排序

聚四氟乙烯

我有一些数据集,需要uniquenameclass针对每个日期进行分组在下面的示例数据中,我使用了UniqueNameClass1UniqueNameClass3等等,但是实际上它们仅是文本字符串。因此,我需要做的是在csv中循环选择一个日期都相同的组,然后在该日期组中进行分组UniqueNameClass如果这很难理解,那么本示例将阐明我遇到的问题:

原始数据

text,text,text,11/03/12,text,text,text,UniqueNameClass1,text,text
text,text,text,11/03/12,text,text,text,UniqueNameClass2,text,text
text,text,text,11/03/12,text,text,text,UniqueNameClass4,text,text
text,text,text,11/03/12,text,text,text,UniqueNameClass3,text,text
text,text,text,11/03/12,text,text,text,UniqueNameClass1,text,text
text,text,text,11/03/12,text,text,text,UniqueNameClass2,text,text
text,text,text,11/03/12,text,text,text,UniqueNameClass5,text,text
text,text,text,11/03/12,text,text,text,UniqueNameClass1,text,text
text,text,text,11/03/12,text,text,text,UniqueNameClass1,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass5,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass3,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass4,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass5,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass5,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass3,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass5,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass4,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass4,text,text
text,text,text,13/03/12,text,text,text,UniqueNameClass5,text,text
text,text,text,13/03/12,text,text,text,UniqueNameClass4,text,text
text,text,text,13/03/12,text,text,text,UniqueNameClass2,text,text
text,text,text,13/03/12,text,text,text,UniqueNameClass1,text,text 
text,text,text,13/03/12,text,text,text,UniqueNameClass3,text,text
text,text,text,13/03/12,text,text,text,UniqueNameClass2,text,text
text,text,text,13/03/12,text,text,text,UniqueNameClass2,text,text

数据按日期排序,然后按UniqueNameClass分组

text,text,text,11/03/12,text,text,text,UniqueNameClass1,text,text
text,text,text,11/03/12,text,text,text,UniqueNameClass1,text,text
text,text,text,11/03/12,text,text,text,UniqueNameClass1,text,text
text,text,text,11/03/12,text,text,text,UniqueNameClass1,text,text
text,text,text,11/03/12,text,text,text,UniqueNameClass2,text,text
text,text,text,11/03/12,text,text,text,UniqueNameClass2,text,text
text,text,text,11/03/12,text,text,text,UniqueNameClass4,text,text
text,text,text,11/03/12,text,text,text,UniqueNameClass3,text,text
text,text,text,11/03/12,text,text,text,UniqueNameClass5,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass3,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass3,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass4,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass4,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass4,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass5,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass5,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass5,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass5,text,text
text,text,text,13/03/12,text,text,text,UniqueNameClass1,text,text
text,text,text,13/03/12,text,text,text,UniqueNameClass2,text,text
text,text,text,13/03/12,text,text,text,UniqueNameClass2,text,text
text,text,text,13/03/12,text,text,text,UniqueNameClass2,text,text
text,text,text,13/03/12,text,text,text,UniqueNameClass3,text,text
text,text,text,13/03/12,text,text,text,UniqueNameClass4,text,text
text,text,text,13/03/12,text,text,text,UniqueNameClass5,text,text

因此,只能将同一日期的数据分组为UniqueNameClass我知道在此示例中,我实际上按时间顺序排列了各个组,这与组的顺序无关紧要,只是每个组在给定日期的每一行彼此相邻。

编辑

我尝试运行phihag提供的代码,有很多不同的方式,但是我尝试过的所有方法都产生了回溯:

File "C:\RawDataeDataTest.py", line 6, in <module>
    data = list(csv.reader(io.StringIO('RawDataeDataTest.csv')))
TypeError: initial_value must be unicode or None, not str

我认为可以根据提供的代码和提供的注释工作的代码是:

import csv
import io

data = list(csv.reader(io.StringIO('RawDataeDataTest.csv')))
data.sort(key=lambda row: (row[3], row[7]))
print(u'\n'.join(u','.join(row) for row in data))

import csv
import io

data = list(csv.reader('RawDataeDataTest.csv'))
data.sort(key=lambda row: (row[3], row[7]))
print(u'\n'.join(u','.join(row) for row in data))

对于后者,我实际上得到了不同的回溯:

Traceback (most recent call last):
  File "C:\RawDataeDataTest.py", line 7, in <module>
    data.sort(key=lambda row: (row[3], row[7]))
  File "C:\RawDataeDataTest.py", line 7, in <lambda>
    data.sort(key=lambda row: (row[3], row[7]))
IndexError: list index out of range
皮哈格

只需提供一个key函数sort提取合适的领域,就像这样:

import csv
import io

s = u'''text,text,text,11/03/12,text,text,text,UniqueNameClass1,text,text
text,text,text,11/03/12,text,text,text,UniqueNameClass2,text,text
text,text,text,10/03/12,text,text,text,UniqueNameClass3,text,text
text,text,text,12/03/12,text,text,text,UniqueNameClass1,text,text
text,text,text,10/03/12,text,text,text,UniqueNameClass2,text,text
text,text,text,10/03/12,text,text,text,UniqueNameClass5,text,text'''

data = list(csv.reader(io.StringIO(s)))
data.sort(key=lambda row: (row[3], row[7]))
print(u'\n'.join(u','.join(row) for row in data))

要读取文件而不是常量字符串,只需传入打开的文件:

with open('RawDataeDataTest.csv', 'rb') as csvf:
    data = list(csv.reader(csvf))
data.sort(key=lambda row: (row[3], row[7]))
print(u'\n'.join(u','.join(row) for row in data))

如果要将结果再次存储在同一文件中,请先将其写入一个临时文件,然后原子地将其移动:

import csv
import functools
import io
import tempfile
import os
import sys

filename = 'RawDataeDataTest.csv'

if sys.version_info >= (3, 0):
    open_args = lambda mode: {'encoding': 'utf-8', 'mode': mode}
else:
    open_args = lambda mode: {'mode': mode + 'b'}

with io.open(filename, **open_args('r')) as csvf:
    data = list(csv.reader(csvf))
data.sort(key=lambda row: (row[3], row[7]))


with tempfile.NamedTemporaryFile(dir=os.path.dirname(filename), delete=False,
                                 **open_args('w')) as of:
    try:
        csv.writer(of).writerows(data)
        of.flush()
    except:
        os.unlink(of.name)
        raise

    try:
        os.replace(of.name, filename)
    except AttributeError:  # Python < 3.3
        if os.name == 'nt':
            os.remove(filename)
        os.rename(of.name, filename)

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

创建一个按日期和类别对数据进行分组的图形

按类别对数值进行分组

按日期对数据存储进行排序?

如何在javascript中按类别对数据数组进行分组

使用R按类别对数据进行分组,然后获取所有列的总和

R:如何按二进制类别对数据帧行进行分组?

如何根据类别对数组进行排序?

如何按类别对集合目录进行排序?

Laravel 5:按类别对产品进行排序,

如何在Django中按类别对主题进行排序?

WooCommerce按类别对订单项进行排序

在Django中按类别对项目进行排序

按公共日期对数组数据进行排序

按日期列对数据表进行排序

无法按日期对数据透视表进行排序

Flutter Firestore,按日期对数据进行排序

需要帮助按日期对数据进行排序

按日期对数据进行排序。那容易吗?

在react js中按日期对数据进行排序

按字符和日期列对数据框进行排序

无法按日期对数据进行降序排序

如何按日期对数据库进行排序?

按最近日期对数据表进行排序

使用orderBy按日期对数据进行排序仅按天数而不是年份对数据进行排序。[AngularJS]

如何按子类别的不同计数对数据框/数据透视表进行排序?

按名称然后按日期对数据框进行排序,同时保持名称排序

按匹配日期对数字进行排序

仅使用每个类别 ID 之一对数据集进行排序

按类别和无限子类别对对象数组进行排序的最佳方法