它實際上是一個解聚,因爲我有一個數據集的結構是這樣的:大熊貓:聚合基礎上開始/結束日期
id type first_year last_year
A t1 2009 2014
A t1 2010 2015
B t1 2007 2009
B t2 2008 2011
但我需要通過ID /年聚集並具有重疊的開始/結束條目。
數據是在像這樣一個熊貓數據幀:
test_frame = pd.DataFrame([['A','t1',2009,2014],
['A','t1',2010,2015],
['B','t1',2007,2009],
['B','t2',2008,2011]],
columns = ['id','type','first_year','last_year'])
我希望能得到一些不同的方式返回的數據:
id year count
A 2009 1
A 2010 2
A 2011 2
...
B 2007 1
B 2008 2
B 2009 1
也許是這樣的:
id year type count
A 2009 t1 1
A 2010 t1 2
A 2011 t1 2
...
B 2007 t1 1
B 2008 t1 1
B 2008 t2 1
B 2009 t2 1
B 2010 t2 1
這基本上適用於第一種方法,但正如您可以想象的,使用itertuples處理大量數據的速度很慢組。還有更多熊貓的方式嗎?
out_frame = pd.DataFrame(columns = ['id','type','year'])
for rows in test_frame.itertuples():
for year in range(int(rows[3]),int(rows[4])):
d2 = pd.DataFrame({'id': [rows[1]],'year': [year]},columns = ['id','year'])
out_frame = out_frame.append(d2)
output1 = out_frame.groupby(['id','year'])['year'].count()
output1
不錯的解決方案! – MaxU