[英]Creating dataframe by adjusting the index taken from list of tuples
我試圖從下面的元組列表中創建一個數據框。 元組中的第一項是ID
,第二個values
是值列表,第三個是lag
。 這個lag
定義了我需要在第一個元組的任一方向上移動多少索引才能獲取數據幀。
mytup = [(111, [1,2,3,4,5], 0), (222, [33,44,55,66], 2), (333, [0,11,22,33], -1)]
ID values lag
111 1,2,3,4,5 0
222 33,44,55,66 2
333 0,11,22,33 -1
下面給出了作為數據框創建的結果。 第一行是此數據幀中的標題。 lag
總是參考第一列( 111
)。
111 222 333
nan nan 0
1 nan 11
2 nan 22
3 33 33
4 44 nan
5 55 nan
nan 66 nan
我要填充數據框的方法是從第一個元組開始。 然后,我從其余的一個元組中取出一個元組,並在引入nan
的數據幀中進行填充。
一旦看到第二個元組,我將在數據框中使用它:
111 222
1 nan
2 nan
3 33
4 44
5 55
nan 66
第三元組的負滯后值為-1
,因此我希望先前的數據幀向下移動一個位置並創建最終的數據幀,然后再次進行復制。
111 222 333
nan nan 0
1 nan 11
2 nan 22
3 33 33
4 44 nan
5 55 nan
nan 66 nan
編輯:
正如@cphlewis指出的那樣,輸出將取決於列添加的順序。 在我的情況下,滯后總是相對於第一個(原始)向量。 因此,無論順序如何,最終結果都將保持不變。
使用此命令(來自pandas.Series文檔字符串):
系列(+,-,/,*,**)之間的運算根據其關聯的索引值對齊值-它們的長度不必相同。 結果索引將是兩個索引的排序聯合。
import pandas as pd
from numpy import arange
#mytup = [(111, [1,2,3,4,5], 0), (222, [33,44,55,66], 2), (333, [0,11,22,33], -1)]
mytup = [(111, [1,2,3,4,5], 0),
(222, [33,44,55,66], 2),
(444, [1,2,3,4,5], 0),
(333, [0,11,22,33], -1),
('a', [5,6,7], -2)]
def SfromTuple(row):
name, data, shift = row
return pd.Series(data, index = arange(shift, len(data) + shift))
reindexed = pd.concat([SfromTuple(row) for row in mytup], axis=1)
reindexed.columns = [x[0] for x in mytup]
print(reindexed)
來自原始mytup
結果:
0 111 222 333 -1 NaN NaN 0 0 1 NaN 11 1 2 NaN 22 2 3 33 33 3 4 44 NaN 4 5 55 NaN 5 NaN 66 NaN
從上面添加的更長的mytup
:
0 111 222 444 333 a -2 NaN NaN NaN NaN 5 -1 NaN NaN NaN 0 6 0 1 NaN 1 11 7 1 2 NaN 2 22 NaN 2 3 33 3 33 NaN 3 4 44 4 NaN NaN 4 5 55 5 NaN NaN 5 NaN 66 NaN NaN NaN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.