【问题标题】:Finding highest mean in CSV file在 CSV 文件中查找最高均值
【发布时间】:2019-12-01 00:29:11
【问题描述】:

所以,我有一个 csv 文件如下:[Smaller Sample]

value,variable
320,1
272,1
284,1
544,2
568,2
544,2
316,3
558,3
542,3
260,4
266,4
710,4
272,5
290,5
558,5
416,6
782,6
626,6

我的目标是找到每个分组的最高平均值。所以,在这种情况下,分组6 是最高的。有了这些信息,我将创建一个新列,将分组 6 与所有其他列进行比较。 像这样:

320,1,1
272,1,1
284,1,1
544,2,1
568,2,1
544,2,1
316,3,1
558,3,1
542,3,1
260,4,1
266,4,1
710,4,1
272,5,1
290,5,1
558,5,1
416,6,9
782,6,9
626,6,9

我完全不知道从哪里开始。我最初认为也许我应该将每一行分成一个字典,然后对每个分组进行平均,制作一个新的键作为平均值,然后取所有键[平均分组]并检测哪个是最高的。我只是不确定如何将其放回 CSV,甚至在保持数据完整性的同时执行此操作。

【问题讨论】:

  • 如何将91 派生为第三列的唯一值?你能澄清一下你的比较方法吗?
  • 它们是任意值,它们只是用来区分分组1,2,3,4,56。因为6 在所有分组中具有最高的平均值。如果您需要更多说明,请告诉我。
  • 我也不明白你如何计算第三列。你能举个例子说明你如何比较第 6 组和其他组吗?
  • 本质上,第三列是哪个组的平均值最高的标识符。也许使用19 并不是表达我的问题的最佳方式,但我们的目标是有一个第三列来区分组的最高平均值与其他列。
  • 分组是指第二列。它有一个介于 1 到 6 之间的标识符来表示不同的数据集。例如,在此示例中,分组 1 的值为 320,272,284

标签: python csv sorting average


【解决方案1】:

要做这种事情,我建议使用pandas 包:

import pandas as pd

# Read your file
data = pd.read_csv("file.csv")

# Get the group means
group_means = data.groupby('variable')['value'].agg('mean') 

# Get the group with highest mean
group_max = group_means.idxmax()

# Add the last column to differentiate the highest mean
data['comparison'] = (data['variable'] == group_max).astype(int)

【讨论】:

    【解决方案2】:

    你可以使用itertools.groupby:

    import itertools, csv
    _h, *data = csv.reader(open('filename.csv'))
    new_data = [(a, list(b)) for a, b in itertools.groupby(data, key=lambda x:x[-1])]
    _max = max(new_data, key=lambda x:sum(a for a, _ in x[-1])/float(len(x[-1])))[0]
    with open('results.csv', 'w') as f:
      write = csv.writer(f)
      write.writerows([_h, *[[a, b, 9 if b == _max else 1] for a, b in data]])
    

    输出:

    value,variable
    320,1,1
    272,1,1
    284,1,1
    544,2,1
    568,2,1
    544,2,1
    316,3,1
    558,3,1
    542,3,1
    260,4,1
    266,4,1
    710,4,1
    272,5,1
    290,5,1
    558,5,1
    416,6,9
    782,6,9
    626,6,9
    

    【讨论】:

      猜你喜欢
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-04
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      • 2017-02-18
      相关资源
      最近更新 更多