对csv中的类进行比较计算

时间:2013-10-28 16:33:12

标签: python python-2.7 csv collections dictionary

我正在尝试对csv中的数据组执行相对简单的计算。我觉得我需要使用的函数包含在集合库中,但是已经多次浏览了这个库的文档(http://docs.python.org/2/library/collections.html)。我无法弄清楚如何使用这个库来实现我想要的输出。也许还有另一种方式?

我需要做的(有效的)是;对于每个Uniqueclasselement组,标识第4列中的最大数字(基于零的列引用)。然后,对于该组中的每一行,计算此“大”数与此行中第4列的数之间的差异。对于Uniqueclasselement1中的前三行,6 15& 2(分别为111减去105,96和109)。然后我需要将此数字添加到列2中的数字,并将结果追加到此csv中的新列。

示例数据:

data,Uniqueclasselement1,52,data,105
data,Uniqueclasselement1,58,data,96
data,Uniqueclasselement1,59,data,109
data,Uniqueclasselement1,42,data,111
data,Uniqueclasselement1,32,data,107
data,Uniqueclasselement1,49,data,105
data,Uniqueclasselement1,50,data,104
data,Uniqueclasselement1,51,data,89
data,Uniqueclasselement1,79,data,99
data,Uniqueclasselement2,69,data,105
data,Uniqueclasselement2,58,data,96
data,Uniqueclasselement2,88,data,109
data,Uniqueclasselement2,84,data,111
data,Uniqueclasselement2,90,data,107
data,Uniqueclasselement2,55,data,105
data,Uniqueclasselement2,56,data,104
data,Uniqueclasselement2,79,data,89
data,Uniqueclasselement2,79,data,99
data,Uniqueclasselement3,63,data,105
data,Uniqueclasselement3,66,data,96
data,Uniqueclasselement3,69,data,109
data,Uniqueclasselement3,72,data,111
data,Uniqueclasselement3,52,data,107
data,Uniqueclasselement3,89,data,105
data,Uniqueclasselement3,70,data,104
data,Uniqueclasselement3,91,data,89
data,Uniqueclasselement3,79,data,99

期望的结果

data,Uniqueclasselement1,52,data,105,58
data,Uniqueclasselement1,58,data,96,73
data,Uniqueclasselement1,59,data,109,61
data,Uniqueclasselement1,42,data,111,42
data,Uniqueclasselement1,32,data,107,36
data,Uniqueclasselement1,49,data,105,55
data,Uniqueclasselement1,50,data,104,57
data,Uniqueclasselement1,51,data,89,73
data,Uniqueclasselement1,79,data,99,91
data,Uniqueclasselement2,69,data,105,81
data,Uniqueclasselement2,58,data,96,79
data,Uniqueclasselement2,88,data,109,96
data,Uniqueclasselement2,84,data,117,84
data,Uniqueclasselement2,90,data,107,100
data,Uniqueclasselement2,55,data,105,67
data,Uniqueclasselement2,56,data,104,69
data,Uniqueclasselement2,79,data,89,107
data,Uniqueclasselement2,79,data,99,97
data,Uniqueclasselement3,63,data,105,67
data,Uniqueclasselement3,66,data,96,79
data,Uniqueclasselement3,69,data,109,69
data,Uniqueclasselement3,72,data,101,80
data,Uniqueclasselement3,52,data,107,54
data,Uniqueclasselement3,89,data,105,93
data,Uniqueclasselement3,70,data,104,75
data,Uniqueclasselement3,91,data,89,111
data,Uniqueclasselement3,79,data,99,89

我已经定义了我希望进行的整个任务,而不是因为stackoverflow社区为我提供了整个代码,而是定义了我想要实现的目标。评论中提到,这可能是熊猫中的一行代码。我在youtube上花了3个小时观看pandas教程,而且我对如何为这个csv执行每个uniqueclasselement的计算更加明智。我真的很感激一些建设性的意见或指示,而不是标准的“你曾尝试过什么”旅。

1 个答案:

答案 0 :(得分:4)

import pandas as pd
df = pd.read_csv('inputfile.csv', header=None, sep=',')

df[5] = df.groupby(1)[4].transform(max)-df[4]+df[2]

df.to_csv('test.csv', header=False)