列表列表,数据分析Python

2021-10-17 18:47:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我将csv转换为列表:

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

我需要分析该列表上的信息,其中按客户群和日期进行分析,首先是2017年12月27日的AAA客户、2017年12月28日的AAA客户、2017年12月27日的BBB、2017年12月28日的BBB、2017年12月27日的CCC、2017年12月28日的CCC,并且在这些群中的每个群中都考虑了分析(稳定警报或增量,在这种情况下,如果对于2017年12月27日的AAA客户端,所有分析值都是稳定的,我希望新的csv文件出现:AAA,2017年12月27日,客户端的性能是稳定的,等等,对于每个客户端和日期!你知道吗

我需要一些有条件的功能,其中每个列表的客户和日期是相等的分析列,并根据这一点,如果他们都是稳定的,AAA,12/27/2017,稳定:客户的表现是稳定的,如果没有AAA,12/27/2017,没有分析

我对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
3条回答
网友
1楼 ·
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"])
网友
2楼 ·

我想这可能会引导你达到你想要的,但是,不确定这是否会完全有帮助。由于您没有筛选数据的条件,因此我尝试了以下方法来获得所需的输出。请注意,这只是一个尝试,以引导你对熊猫。你知道吗

pandas将是处理此问题的最佳方式,因为您可以按自己的方式操作数据。在pandas中读取csv。你知道吗

我这样做只是为了让你的数据进入熊猫数据框

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。你也可以把它们包装成一个函数。希望这能引导你找到一种有效的分析方法。你知道吗

网友
3楼 ·

熊猫套餐里有你需要的工具。不过,我建议从scipyanaconda开始,因为我发现单独安装Pandas非常困难。你知道吗

相关问题