Я пытаюсь построить сводную таблицу (позже собираюсь превратить в матрицу переходов для цепи Маркова).Ниже приведены поддельные данные, которые более или менее представляют реальные данные.У меня есть данные за 20 лет с не менее чем 200 миллионами строк в год.
import numpy as np
import pandas as pd
создание поддельных данных
newd = {'year': [2001, 2002, 2005, 2002, 2004, 1999, 1999, 1999, 2012, 2000, 2010, 2005, 2006, 2009, 2009,
2009, 2009, 2010, 2007, 2008, 2009, 2010, 2000, 2001, 2002],
'tin': [12, 23, 24, 28,30, 12,7, 12, 12, 23, 24, 7, 12, 35, 39,37, 36, 333, 13, 13, 13, 13, 7, 7, 7],
'ptin': [12, 23, 28, 22, 12, 12,0, 12, 12, 23, 27, 45, 99, 7, 7, 7, 7, 0, 17, 21, 26, 18, 0, 18, 19] }
несколько анализов выборки
newdf = pd.DataFrame (newd)
группа олова по банке плательщика
df=newdf.groupby(['tin', 'year'])['ptin'].groups
#print(list(df))
#print(np.unique(newdf['year'].values))
с использованием функции pivot_table для просмотра распределений по годам олова и ptin.
print(newdf.pivot_table(index=['tin', 'year'], columns='ptin', values=['ptin', 'tin'], aggfunc=len, fill_value=0))
приводит к
ptin 0 7 12 17 18 19 21 22 23 26 27 28 45 99
tin year
7 1999 1 0 0 0 0 0 0 0 0 0 0 0 0 0
2000 1 0 0 0 0 0 0 0 0 0 0 0 0 0
2001 0 0 0 0 1 0 0 0 0 0 0 0 0 0
2002 0 0 0 0 0 1 0 0 0 0 0 0 0 0
2005 0 0 0 0 0 0 0 0 0 0 0 0 1 0
12 1999 0 0 2 0 0 0 0 0 0 0 0 0 0 0
2001 0 0 1 0 0 0 0 0 0 0 0 0 0 0
2006 0 0 0 0 0 0 0 0 0 0 0 0 0 1
2012 0 0 1 0 0 0 0 0 0 0 0 0 0 0
13 2007 0 0 0 1 0 0 0 0 0 0 0 0 0 0
2008 0 0 0 0 0 0 1 0 0 0 0 0 0 0
2009 0 0 0 0 0 0 0 0 0 1 0 0 0 0
2010 0 0 0 0 1 0 0 0 0 0 0 0 0 0
23 2000 0 0 0 0 0 0 0 0 1 0 0 0 0 0
2002 0 0 0 0 0 0 0 0 1 0 0 0 0 0
24 2005 0 0 0 0 0 0 0 0 0 0 0 1 0 0
2010 0 0 0 0 0 0 0 0 0 0 1 0 0 0
28 2002 0 0 0 0 0 0 0 1 0 0 0 0 0 0
30 2004 0 0 1 0 0 0 0 0 0 0 0 0 0 0
35 2009 0 1 0 0 0 0 0 0 0 0 0 0 0 0
36 2009 0 1 0 0 0 0 0 0 0 0 0 0 0 0
37 2009 0 1 0 0 0 0 0 0 0 0 0 0 0 0
39 2009 0 1 0 0 0 0 0 0 0 0 0 0 0 0
333 2010 1 0 0 0 0 0 0 0 0 0 0 0 0 0
, что соответствует фрейму данныхсверху.
Теперь вопрос в том, эффективен ли этот код, если мне нужно запустить миллиарды строк для трех столбцов?скажем, будет 6,5 миллиона столбцов и последовательно 200 миллионов строк в течение многих лет.Кто-нибудь сталкивался с этим?
Теперь я также пытаюсь построить вероятность перехода, скажем, олова в год x при переходе от ptin y к ptin z?Есть мысли по этому поводу?Я знаю, что это слишком много, чтобы спросить, но, черт возьми, я получаю много ответов в Stackoverflow.Еще одна стратегия, о которой я думал, заключалась в том, чтобы складировать данные, но пока не знаю.