【问题标题】:List of List, Data Analyzed Python列表列表,数据分析 Python
【发布时间】:2018-06-11 19:53:25
【问题描述】:

我将 csv 转换为列表:

import csv
with open('DataAnalizada.csv', 'rb') as f:
    reader = csv.reader(f)
    a = list(reader)

我需要分析该列表上的信息,该列表按客户组和日期首先作为 AAA 客户在 2017 年 12 月 27 日,AAA 于 2017 年 12 月 28 日,BBB 于 2017 年 12 月 27 日,BBB 于 2017 年2017 年 12 月 28 日,2017 年 12 月 27 日 CCC,2017 年 12 月 28 日 CCC,并且在每个组中都考虑了分析(稳定警报或增量,这是可以呈现的 3 个变量)这种情况下,如果对于 2017 年 12 月 27 日的 AAA 客户端,所有分析值都是稳定的,我希望出现新的 csv 文件:AAA,2017 年 12 月 27 日,每个客户端的客户端性能稳定等等和日期!

我需要一些有条件的函数,对于每个列表,客户和日期相等,分析分析列,并根据此分析它们是否都是 Estable、AAA、12/27/2017、Estable:客户的表现是稳定的,如果没有 AAA,2017 年 12 月 27 日,没有分析

我对 python 还很陌生,我不能靠我自己真诚地做到这一点。我不知道如何通过嵌套列表并将其分组,就像我之前问的那样。对于问题中缺少代码,我深表歉意

a = [['Cliente', 'Fecha', 'Variables', 'Dia Previo', 'Mayor/Menor', 'Dia a Analizar', 'Analisis'], 
['AAA', '27/12/2017', 'ECPM_medio', '0.41', 'Dentro del Margen', '0.35', 'Estable'], 
['AAA', '27/12/2017', 'Fill_rate', '2.25', 'Dentro del Margen', '2.7', 'Estable'], 
['AAA', '27/12/2017', 'Importe_a_pagar_a_medio', '62.4', 'Dentro del Margen', '61.21', 'Estable'], 
['AAA', '27/12/2017', 'Impresiones_exchange', '153927.0', 'Dentro del Margen', '173663.0', 'Estable'], 
['AAA', '27/12/2017', 'Subastas', '6827946.0', 'Dentro del Margen', '6431093.0', 'Estable'], 
['BBB', '27/12/2017', 'ECPM_medio', '1.06', 'Dentro del Margen', '1.06', 'Alerta'], 
['BBB', '27/12/2017', 'Fill_rate', '26.67', 'Dentro del Margen', '27.2', 'Alerta'], 
['BBB', '27/12/2017', 'Importe_a_pagar_a_medio', '11.34', 'Dentro del Margen', '12.77', 'Estable'], 
['BBB', '27/12/2017', 'Impresiones_exchange', '10648.0', 'Dentro del Margen', '12099.0', 'Estable'], 
['BBB', '27/12/2017', 'Subastas', '39930.0', 'Dentro del Margen', '44479.0', 'Estable'],
['AAA', '28/12/2017', 'ECPM_medio', '0.41', 'Dentro del Margen', '0.35', 'Estable'], 
['AAA', '28/12/2017', 'Fill_rate', '2.25', 'Dentro del Margen', '2.7', 'Estable'], 
['AAA', '28/12/2017', 'Importe_a_pagar_a_medio', '62.4', 'Dentro del Margen', '61.21', 'Estable'], 
['AAA', '28/12/2017', 'Impresiones_exchange', '153927.0', 'Dentro del Margen', '173663.0', 'Estable'], 
['AAA', '28/12/2017', 'Subastas', '6827946.0', 'Dentro del Margen', '6431093.0', 'Estable'], 
['BBB', '28/12/2017', 'ECPM_medio', '1.06', 'Dentro del Margen', '1.06', 'Estable'], 
['BBB', '28/12/2017', 'Fill_rate', '26.67', 'Dentro del Margen', '27.2', 'Estable'], 
['BBB', '28/12/2017', 'Importe_a_pagar_a_medio', '11.34', 'Dentro del Margen', '12.77', 'Estable'], 
['BBB', '28/12/2017', 'Impresiones_exchange', '10648.0', 'Dentro del Margen', '12099.0', 'Estable'], 
['BBB', '28/12/2017', 'Subastas', '39930.0', 'Dentro del Margen', '44479.0', 'Estable']]

我需要的新 csv 示例:

Cliente,Fecha,Analisis
AAA,27/12/2017,Stable: The client's performance was Stable
AAA,28/12/2017,Stable: The client's performance was Stable
BBB,27/12/2017,Stable: The client's performance was Stable
BBB,28/12/2017, Stable: The client's performance was Stable
CCC,27/12/2017,Stable: The client's performance was Stable
CCC,28/12/2017,Stable: The client's performance was Stable

【问题讨论】:

  • 你能发布一个你想要的示例输出吗?为什么不 pandas 进行这些类型的分析?
  • 我只放了一个! @i.n.n.m
  • 就我的肉眼而言,从您的样本数据来看,一切都应该是稳定的,因为 BBB 也出现在两个日期。否则,BBB,28/12/2017,No Analized 在什么条件下?另外,让我们删除上面的一些 cmets 以保持干净
  • 抱歉,我编辑了列表,但没有保存!是的,你在写!现在我们也一样!你现在明白我的问题了吗? @i.n.n.m

标签: python python-2.7 list csv


【解决方案1】:

Pandas 包包含您需要的工具。不过我建议从 scipyanaconda 开始,因为我发现自己安装 Pandas 非常困难。

【讨论】:

  • 你需要提供一个答案,而不是你对你认为使用什么工具的意见。
【解决方案2】:

我认为这可能会导致您获得想要的结果,但是,不确定这是否会完全有帮助。由于您没有过滤数据的条件,因此我尝试了以下方法来获得所需的输出。请注意,这只是引导您使用 pandas 的尝试。

pandas 将是解决此问题的最佳方式,因为您可以按照您想要的方式操作数据。读取pandas中的csv。

我只是这样做是为了将您的数据放入 pandas 数据框,

import pandas as pd
headers = a.pop(0)
df = pd.DataFrame(a, columns = headers)
df

输出:

   Cliente  Fecha      Variables  Dia Previo    Mayor/Menor        Dia a Analizar   Analisis
0   AAA     27/12/2017  ECPM_medio  0.41        Dentro del Margen   0.35    Estable
1   AAA     27/12/2017  Fill_rate   2.25        Dentro del Margen   2.7     Estable
...

在此之后,我创建了一个带有状态的新列(仍然不知道确切的条件)

for i in df['Analisis']:
    if i == 'Estable' or i == 'Alerta':
        df['Status'] = 'Stable: The client''s performance was Stable'

现在,您可以在 pandas 中使用 groupby 函数来创建所需的输出。

df1= df.groupby(['Cliente','Fecha', 'Status']).size()
df1

输出,

Cliente  Fecha       Status                                    
AAA      27/12/2017  Stable: The clients performance was Stable    5
         28/12/2017  Stable: The clients performance was Stable    5
BBB      27/12/2017  Stable: The clients performance was Stable    5
         28/12/2017  Stable: The clients performance was Stable    5

当你使用groupby 时,你必须使用聚合函数,我使用了.size()

现在,您可以将此数据帧 df1 写入 csv。您也可以随时将它们包装到一个函数中。希望这将引导您为您的目的找到一种有效的分析方法。

【讨论】:

  • 没关系,但我有问题。如果“分析”列中有“下降”,我有相同的结果稳定:客户表现稳定。怎么可能?
  • 确切的条件是,例如Cliente AAA 的任何列是否具有您所有的Analisiscolumn Estable, df['Status'] = 'Stable: The client''s performance was Stable'if not `df['Status'] = 'NotAnalyzed'跨度>
【解决方案3】:
import csv 
from collections import namedtuple

with open('DataAnalizada.csv', 'rb') as f: 
    reader = csv.reader(f)
    first_col = reader.next()
    header = namedtuple('header', first_col)
    data = {}
    for val in reader:
         get_ = header(*val)
         if get_.Analisis == 'Estable':
             get_data = (get_.Cliente, get_.Fecha)
             if get_data in data:
                 get_list = data[get_data]
                 get_list.append(val)
             else:
                  data.setdefault(get_data, [])            
    with open('DataAnalizada_new.csv', 'wb+') as filename:
        header = ['Cliente','Fecha','Analisis']
        writer = csv.writer(filename)
        writer.writerow(header)
        for val in data.keys():
            writer.writerow(val + ["Stable: The client's performance was Stable"])

【讨论】:

  • 我希望它现在可以帮助你..!
猜你喜欢
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多