Usar o Timegrouper '1M' para agrupar e somar por colunas está atrapalhando meu índice de datas pandas python
O erro foi encontrado: Os trechos de código publicados como soluções abaixo funcionam. O problema dos meus resultados estava enraizado na fonte de dados (FEC.GOV). Eu o encontrei e agora estou seguindo em frente. Agradecemos imenso tempo, paciência, ajuda etc. da comunidade em relação a esse problema!
Como sugerimos soluções que funcionam com os trechos encontrados no site do github, estou fornecendo o seguinte link para os arquivos originais (http://fec.gov/finance/disclosure/ftpdet.shtml#a2011_2012) Estou usando os anos de 2008 a 2014, Arquivo de dados: pas212.zip, Nome dos dados: (contribuições para candidatos (e outras despesas) dos comitês). Além disso, como o código abaixo pode ser encontrado em [https://github.com/Michae108/python-coding.git]. Agradecemos antecipadamente por qualquer ajuda na resolução deste problema. Estou trabalhando há três dias no que deve ser uma tarefa muito simples. Eu importo e concateno 4 "|" arquivos de valor separados. Leia como pd.df; defina a coluna de data como date.time. Isso me dá a seguinte saída:
cmte_id trans_typ entity_typ state amount fec_id cand_id
date
2007-08-15 C00112250 24K ORG DC 2000 C00431569 P00003392
2007-09-26 C00119040 24K CCM FL 1000 C00367680 H2FL05127
2007-09-26 C00119040 24K CCM MD 1000 C00140715 H2MD05155
2007-07-20 C00346296 24K CCM CA 1000 C00434571 H8CA37137
Em segundo lugar, quero poder agrupar o índice pela frequência de um mês. Então eu quero somar a [quantidade] de acordo com [trans_typ] e [cand_id].
Aqui está o meu código para fazer isso:
import numpy as np
import pandas as pd
import glob
df = pd.concat((pd.read_csv(f, sep='|', header=None, low_memory=False, \
names=['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', \
'12', '13', 'date', '15', '16', '17', '18', '19', '20', \
'21', '22'], index_col=None, dtype={'date':str}) for f in \
glob.glob('/home/jayaramdas/anaconda3/Thesis/FEC_data/itpas2_data/itpas2**.txt')))
df.dropna(subset=['17'], inplace=True)
df.dropna(subset=['date'], inplace=True)
df['date'] = pd.to_datetime(df['date'], format='%m%d%Y')
df1 = df.set_index('date')
df2 = df1[['1', '6', '7', '10', '15', '16', '17']].copy()
df2.columns = ['cmte_id', 'trans_typ', 'entity_typ', 'state', 'amount',\
'fec_id','cand_id']
df2['amount'] = df2['amount'].astype(float)
grouper = df2.groupby([pd.TimeGrouper('1M'), 'cand_id', 'trans_typ'])
df = grouper['amount'].sum()
grouper['amount'].sum().unstack().fillna(0)
#print (df.head())
Aqui está minha saída da execução do código:
trans_typ 24A 24C 24E 24F 24K 24N 24R 24Z
date cand_id
1954-07-31 S8AK00090 0 0 0 0 1000 0 0 0
1985-09-30 H8OH18088 0 0 36 0 0 0 0 0
1997-04-30 S6ND00058 0 0 0 0 1000 0 0 0
Como você pode ver, a coluna da data fica bagunçada depois que eu administro o grupo. Estou certo de que minhas datas não vão mais longe desde 2007. Tentei fazer essa tarefa simples de agrupar por períodos de 1 mês e depois somar [valor] por [trans_typ] e [cand_id]. Parece que deveria ser simples, mas não encontrei solução. Eu li muitas perguntas sobre o Stackoverflow e tentei diferentes técnicas para resolver o problema. Alguém tem uma idéia sobre isso?
Aqui está uma amostra dos meus dados brutos, se ajudar:
C00409409|N|Q2|P|29992447808|24K|CCM|PERRIELLO FOR CONGRESS|IVY|VA|22945|||06262009|500|C00438788|H8VA05106|D310246|424490|||4072320091116608455
C00409409|N|Q2|P|29992447807|24K|CCM|JOHN BOCCIERI FOR CONGRESS|ALLIANCE|OH|44601|||06262009|500|C00435065|H8OH16058|D310244|424490|||4072320091116608452
C00409409|N|Q2|P|29992447807|24K|CCM|MIKE MCMAHON FOR CONGRESS|STATEN ISLAND|NY|10301|||06262009|500|C00451138|H8NY13077|D310245|424490|||4072320091116608453
C00409409|N|Q2|P|29992447808|24K|CCM|MINNICK FOR CONGRESS|BOISE|ID|83701|||06262009|500|C00441105|H8ID01090|D310243|424490|||4072320091116608454
C00409409|N|Q2|P|29992447807|24K|CCM|ADLER FOR CONGRESS|MARLTON|NJ|08053|||06262009|500|C00439067|H8NJ03156|D310247|424490|||4072320091116608451
C00435164|N|Q2|P|29992448007|24K|CCM|ALEXI FOR ILLINOIS EXPLORATORY COMMITTEE||||||06292009|1500|C00459586|S0IL00204|SB21.4124|424495|||4071620091116385529