通过调整元组列表中的索引来创建数据帧

2024-10-03 15:30:51 发布

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

我试图从下面的元组列表中创建一个数据帧。元组中的第一项是ID,第二项是值列表,第三项是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

创建为dataframe的结果如下所示。第一行是这个数据帧中的头。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。你知道吗

一旦我已经看到了第二个元组,我将在dataframe中使用它:

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指出的,输出将取决于列的添加顺序。在我的例子中,滞后总是相对于第一个(原始)向量。因此,无论顺序如何,最终结果都将保持不变。你知道吗


Tags: 数据方法id编辑dataframe列表定义顺序
1条回答
网友
1楼 · 发布于 2024-10-03 15:30:51

使用此(从熊猫系列文档字符串):

Operations between Series (+, -, /, *, **) align values based on their associated index values they need not be the same length. The result index will be the sorted union of the two indexes.

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

相关问题 更多 >